html敏捷包获得两次相同的输出c#

时间:2017-07-02 02:26:02

标签: c# xpath html-agility-pack



<div class="header">
  <span id="content">test1</span>
</div>
<div class="header">
  <span id="content">test2</span>
</div>
&#13;
&#13;
&#13;

var web = new HtmlWeb();
var doc = web.Load(url)
var value = doc.DocumentNode.SelectNodes("//div[@class='header']")
foreach(var v in value)
{
var name = v.SelectSingleNode("//span[@id='content']")
Console.Writeline(name.OuterHtml);
}

上面的代码作为输出两次<span id="content">test1</span>而不是<span id="content">test2</span>作为第二输出。因此它获得了正确的节点数,但没有正确的输出。

1 个答案:

答案 0 :(得分:1)

在XPath中使用//和/将查询根节点,即使您使用的是当前节点。

请在代码中查看我的修复程序。

var value = doc.DocumentNode.SelectNodes("//div[@class='header']");
foreach (var v in value)
{
    var name = v.SelectSingleNode("span[@id='content']");
    Console.WriteLine(name.OuterHtml);
}

看到这个小提琴。 https://dotnetfiddle.net/nih2lw

旁注,id属性在文档中应始终唯一。改为使用类。