首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HtmlAgilityPack问题

HtmlAgilityPack问题
EN

Stack Overflow用户
提问于 2021-11-16 10:09:32
回答 1查看 42关注 0票数 0

假设我有以下HTML代码:

代码语言:javascript
复制
<div class="MyDiv">
<h2>Josh</h2>
</div>


<div class="MyDiv">
<h2>Anna</h2>
</div>


<div class="MyDiv">
<h2>Peter</h2>
</div>

我想知道名字,所以这就是我所做的(C#):

代码语言:javascript
复制
    string url = "https://...";
    var web = new HtmlWeb();
    HtmlNode[] nodes = null;
    HtmlDocument doc = null;
    doc = web.Load(url);
    nodes = doc.DocumentNode.SelectNodes("//div[@class='MyDiv").ToArray() ?? null;
    foreach (HtmlNode n in nodes){
         var name = n.SelectSingleNode("//h2");
         Console.WriteLine(name.InnerHtml);        
    }

输出:

代码语言:javascript
复制
Josh
Josh
Josh

这太奇怪了,因为n只包含所需的<div>。我怎样才能解决这个问题?

通过写入.//h2而不是//h2来修正

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-16 11:11:38

这是因为您的XPath语句"//h2“。您应该简单地将其更改为"h2“。当您从两个"//“开始时,路径从顶部开始。然后每次都选择"Josh“,因为这是第一个h2节点。

你也可以这样做:

代码语言:javascript
复制
List<string> names = 
    doc.DocumentNode.SelectNodes("//div[@class='MyDiv']/h2")
        .Select(dn => dn.InnerText)
        .ToList();
        
foreach (string name in names)
{
    Console.WriteLine(name);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69987195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档