4
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(content);
var nodes = doc.DocumentNode.SelectNodes("//div[@class=\"noprint res\"]/div");
if (nodes != null)
{
foreach (HtmlNode data in nodes)
{
// Works but not what I want
MessageBox.Show(data.InnerHtml);
// Should work ? but does not ?
MessageBox.Show(data.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);
}
}
我想解析一個HTML的結果,foreach的初始節點,正如預期的那樣工作,並給出了匹配我需要的10個項目的結果。SelectSingleNode返回錯誤的結果在foreach
當我進入foreach時,如果我輸出數據項的內部html,它會顯示正確的數據,但是如果我輸出SelectSingleNode它將始終顯示來自foreach的第一項的數據,是正常的行爲還是我做錯了什麼?
爲了解決這個問題,我不得不創建的foreach內一個新的HTML像這樣每個數據項:
HtmlAgilityPack.HtmlDocument innerDoc = new HtmlAgilityPack.HtmlDocument();
innerDoc.LoadHtml(data.InnerHtml);
// Select what I need
MessageBox.Show(innerDoc.DocumentNode.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);
然後我得到每個項目的數據正確。
我試圖從中獲取數據的頁面是http://maps.google.com/maps?q=consulting+loc:+US如果你想嘗試看看自己會發生什麼。
基本上我正在閱讀公司名稱的左側欄,發生上述情況。
但是數據節點只有foreach項是錯的嗎?因爲當我使用data.InnerHtml時,它確實顯示了它內部的確切數據,並且沒有我從數據節點單獨選擇的項目的重複。 – Guapo
以「//」開頭表示您不是在數據中搜索,而是在data.OwnerDocument中搜索。 data.OwnerDocument對於所有數據節點都是一樣的。 – hvd
謝謝你解釋,現在更有意義! – Guapo