我使用HtmlAgilityPack來解析和分析HTML頁面,我需要知道每個節點的「深度」 - 距離Body
節點的距離。示例(「深度」屬性僅用於說明目的):如何獲取HTML樹中的節點深度?
<html>
<head></head>
<body depth="0">
<div depth="1">
<ul depth="2">
<li depth="3">
<p depth="4">foo</p>
</li>
<li depth="3">
<p depth="4">bar</p>
</li>
</ul>
</div>
</body>
</html>
我試圖避免兩個明顯的解決方案:
- 掃描HTML樹(DFS,BFS等。 ),計算每個節點的深度,並將這些值存儲在字典或類似內容中。
- 通過計算
node.ParentNode
來計算每個節點「按需」的深度,直到達到body
。
有沒有辦法通過以某種方式使用HtmlAgilityPack在Load
上收集的已有數據來避免這些問題?
正如你自己所指出的那樣,它會產生開銷。遞歸很容易編寫,但在我的情況下很難表現(我已經對其進行了描述)。 我知道沒有'NodeDepth'屬性,但仍然在尋找別的東西可以幫助... – seldary 2012-07-30 07:45:05
啊,你的希望是解析器保持這個計數在可用的地方,所以你不必再次導航樹解析完成後?有道理,但我傾向於說,除非你改變圖書館本身,否則這是不可能的......這可能是一個可行的解決方案,這取決於它的重要性。 – 2012-07-30 07:51:16