<div class="header">
<span id="content">test1</span>
</div>
<div class="header">
<span id="content">test2</span>
</div>
&#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>
作为第二输出。因此它获得了正确的节点数,但没有正确的输出。
答案 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属性在文档中应始终唯一。改为使用类。