2013-03-03 59 views
0

這段代碼給我一個奇怪的例外。 Node "<span class="OrganisationOut"></span>" was not found in the collection但是當我檢查span的外部HTML時,它的<span class="OrganisationOut">National Cheng Kung University</span>。爲什麼它嘗試刪除不同的跨度?刪除孩子拋出異常

doc = web.Load(urlTeams); 

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//tr[contains(@id,'Cell')]")) 
{ 
    HtmlNode span = node.SelectSingleNode(".//span"); 
    lbResults2.Items.Add(span.InnerText); 
    lbResults.Items.Add(node.RemoveChild(span).InnerText.Trim()); 
} 
+0

不要在循環中做多餘的DOM選擇。 – 2013-03-03 17:29:38

+0

你的意思是'HtmlNode span = node.SelectSingleNode(「.// span」);'部分? – a1204773 2013-03-03 17:30:27

+0

http://stackoverflow.com/questions/8269590/removechild-node-was-not-found-cant-work-it-out看到這個 – 2013-03-03 17:31:16

回答

1

既然你讓所有的跨度遞歸當前節點下(這是//意味着XPATH),你可能會得到一個span是不是node一個孩子,但一個大孩子。

在這種情況下,您所看到的呼叫node.RemoveChild(span)將失敗。你想要做的是span.ParentNode.RemoveChild(span)

+0

我做了你說的,但現在lbResults和lbResults2給出相同的輸出 – a1204773 2013-03-03 18:52:48

+0

哦,我解決了它...而不是做所有在一行我應該分開它...像這樣'span.ParentNode.RemoveChild(span); lbResults.Items.Add(node.InnerText.Trim());'代替'lbResults.Items.Add(span.ParentNode.RemoveChild(span).InnerText.Trim());' – a1204773 2013-03-03 19:11:25

+0

謝謝@Simon Mourier – a1204773 2013-03-03 19:12:14