我正在使用HtmlAgilityPack抓取一些數據。HtmlAgilityPack NextSibling.InnerText值爲空
的HTML看起來像這樣:
<div id="id-here">
<dl>
<dt> Field Name </dt>
<dd> Value for above field name </dd>
<dt> Field Name </dt>
<dd> Value for above field name </dd>
<dt> Field Name </dt>
<dd> Value for above field name </dd>
</dl>
</div>
現在我的問題是,沒有永遠場的一組數字,所以我不能可靠地訪問他們每個人都喜歡:
//*[@id="id-here"]/dl[1]/dd[1]
因爲dd [1]可能是一個頁面上的名稱,另一個是另一個電話,因爲用戶未填寫名稱,因此字段被隱藏。
所以我搶,像這樣所有的DT和DD節點:
//*[@id="id-here"]/dl[1]/dt | //*[@id="id-here"]/dl[1]/dd
現在我檢查每個節點,看它是否符合現場我想,走NextSibling值,像這樣:
foreach (HtmlNode node in details)
{
if (node.InnerText.Contains("Tel:")) telephone = node.NextSibling.InnerText;
if (node.InnerText.Contains("Email:")) email = node.NextSibling.InnerText;
}
這適用於電話,但由於某些原因,當「電子郵件:」節點出現時,兩個NextSibling.InnerHTML
& NextSibling.InnerText
都是空白的,儘管下一個兄弟姐妹確實擁有數據。如果我真的去node
details
並看看它InnerHTML
是整個格式化的鏈接和InnerText
是電子郵件地址。
NextSibling.InnerText
不工作,因爲A標籤使它成爲一個孩子或什麼東西?我看了一下調試器,只是在NextSibling
找不到我需要的信息。
我確定答案是可笑的簡單,我只是無法弄清楚。有人把我從痛苦中解救出來了嗎?
有點單獨的問題,但爲什麼你選擇'dd'元素,如果你實際上並沒有計劃在迭代'details'時使用所選的'dd'? – JLRishe 2014-08-27 19:28:55
這樣我可以選擇下一個兄弟。如果我不選擇DD,那麼他們不會在那裏成爲下一個兄弟。 – Guerrilla 2014-08-27 19:33:54
「細節」的內容與節點的兄弟姐妹的內容沒有關係,這正是您在這裏目睹的內容。 – JLRishe 2014-08-27 19:37:50