2017-07-02 52 views
0

HTML敏捷包获得相同的输出两次C#

<div class="header"> 
 
    <span id="content">test1</span> 
 
</div> 
 
<div class="header"> 
 
    <span id="content">test2</span> 
 
</div>

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

确保元素不在文档中重复。尝试使用中断点进行调试,并返回您的调查结果。 –

+0

相同的id为2个不同的跨度? –

回答

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属性在文档中应该始终是唯一的。改为使用class。