2017-07-02 26 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。