使用 Html Agility Pack 从 Web 获取文本

Get Text from web with Html Agility Pack

提问人:user2764693 提问时间:5/9/2021 最后编辑:Brian Rogersuser2764693 更新时间:5/10/2021 访问量:254

问:

我有以下 HTML 结构:

<div class="sub-title">
                        <span class="ng-binding">יתרת עו"ש</span>
                          

我想得到字符串 יתרת עו“ש

我试过了:

var Header = doc.DocumentNode.SelectNodes("//span[@class=ng-binding]"); 
Console.WriteLine(Header.ToString());

但我得到了一个.我做错了什么?NullReferenceException

c# html 解析 html-agility-pack

评论


答:

0赞 Brian Rogers 5/10/2021 #1

这里有几个问题。

  1. 查询属性时,需要在属性值两边使用引号(单引号或双引号都应有效)。所以你的代码应该是:

    var Header = doc.DocumentNode.SelectNodes("//span[@class='ng-binding']"); 
    
  2. SelectNodes如果搜索未找到匹配项,则返回包含一个或多个 或 null。如果只期望一个值,则需要使用 的索引来获取第一个值。从那里,您需要用于从节点获取文本值。所以你的代码应该是:HtmlNodeCollectionHtmlNodes0.InnerText

    Console.WriteLine(Header?[0].InnerText);
    

这是一个工作演示:https://dotnetfiddle.net/nMS1Dg

评论

0赞 user2764693 5/11/2021
谢谢,我希望有教程可以理解属性和语法
0赞 user2764693 5/11/2021
如果我想从 Web 而不是字符串加载怎么办
0赞 Brian Rogers 5/11/2021
如果你想从 Web 加载 HTML,你可以这样做: .或者,可以使用 HttpClient 将内容下载为字符串。var web = new HtmlWeb(); var doc = web.Load(url);