2012-07-17 104 views
2

如何使用Html Agility Pack獲取html頁面上的所有divs id。我正在嘗試獲取所有ID並將它們放入一個集合中。使用Html Agility Pack獲取html頁面上的所有divs id

<p> 
    <div class='myclass1'> 
     <div id='f'> 
     </div> 
     <div id="myclass2"> 
      <div id="my"><div id="h"></div><div id="b"></div></div> 
     </div> 
    </div> 
</p> 

代碼:

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); 
htmlDoc.OptionFixNestedTags=true; 
htmlDoc.Load(filePath);  
HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("div"); 

如何獲取所有div id的收藏?

回答

3

得到div的集合如果你只是想ID的,你可以得到那些id屬性的集合節點,而不是得到一個集合div元素節點。例如:

List<string> ids = new List<string>(); 
foreach(XmlNode node in doc.SelectNodes("//div/@id")) 
{ 
    ids.Add(node.InnerText); 
} 

這將跳過那些不具備編號div元素,比如在你的榜樣的<div class='myclass1'>元素。

"//div/@id"是一個XPath字符串。 XPath是一種技術,如果您在XML中處理得很多,或者在這種情況下通過敏捷包庫來處理HTML,那麼這種技術可以方便地學習。 XPath是一個行業標準,它允許您選擇XML文檔中的匹配節點。

  • //表示您希望它選擇以下節點作爲當前節點的子節點或其任何子節點。由於當前節點是文檔的根節點,因此會在文檔中的任意位置找到匹配的節點。
  • div是我們想要匹配的元素名稱。因此,在這種情況下,我們告訴它在文檔的任何位置查找所有div元素。
  • /表示您想要一個子節點。在這種情況下,id屬性是div元素的子元素,所以首先我們說我們需要div元素,那麼我們需要正斜槓來表示我們需要其中一個div元素的子節點。
  • @id表示我們想要查找所有id屬性。 @符號表示它是屬性名稱而不是元素名稱。
+0

愚蠢的問題,但是什麼概念是// div/@ id正向包含什麼意思和@這意味着 – 2012-07-17 16:42:40

+0

@ Hello-World我在我的答案中添加了更多詳細信息。 – 2012-07-17 16:53:36

+0

非常感謝 - 當你知道如何時很容易 – 2012-07-17 17:38:39

2

呦可以通過傳遞XPath語法

喜歡這個

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); 

    htmlDoc.OptionFixNestedTags=true; 

    htmlDoc.Load(filePath); 

foreach(HtmlNode div doc.DocumentElement.SelectNodes("//div")) 
{ 
///.. code here 
} 
+0

那麼,看看在html中的每個節點,並檢查它是否是一個div?然後在每個我在循環中添加每個ID到我的集合? – 2012-07-17 16:34:01

+0

@ Hello-World // div將獲得子女及其所有後代 – HatSoft 2012-07-17 16:39:19