2012-11-09 37 views
0

我需要製作特定網頁中的記錄列表。我在一個文本文件中獲得了頁面源代碼。我需要通過元素遍歷這個節點上,元素:循環遍歷節點的所有後代並逐個檢查它們

HtmlNodeCollection resultContainer = doc.DocumentNode.SelectNodes("//div[@class='result-list divider-y-5']"); 

對於每一個我需要檢查的類型(DIV,跨度等)的元素,它的「身份證」,它的「類」屬性,能夠製作我的記錄清單。我不想收集所有的或者s。這將無濟於事,因爲我不知道在循環播放時我將面對哪種類型的元素。我必須檢查他們。因爲我需要的所有數據都是上述節點集合的子節點。有什麼建議麼?

+0

是的,使用LinqToXml代替xpath;) 儘管如此,如果你需要給定xpath表達式的所有孩子,你不能只是追加「/」或「/ *」嗎? (我的xpath有點生疏......) – Astrotrain

+0

不,我已經擁有了所有的孩子。現在我需要循環他們。我正在尋找一種方法來檢查每個元素,如果它不是我想要去檢查下一個。 – Disasterkid

+1

我不確定我關注。您可以通過簡單地使用「foreach(var node in resultContainer)」來枚舉resultContainer中的所有節點?或者你想枚舉resultContainer *中的每個節點的每個節點的子節點嗎? – Astrotrain

回答

1
foreach(HtmlNode node in resultContainer) 
{ 
    //check node type 
    switch(node.Name) 
    { 
     case "div": 
     { 
      break; 
     } 
     case "p": 
     { 
     } 
     ///....etc 
    } 

    //get id 
    String id = node.Attributes["id"].Value; 

    //get class 
    String class = node.Attributes["class"].Value; 

} 
+0

謝謝@DaniloVulović – Disasterkid

0

我認爲這是比較容易有HtmlAgilityPack HTML文檔轉換爲XML,如:

doc.Load(htmlStream, true); 
doc.OptionOutputAsXml = true; 
doc.OptionFixNestedTags = true; 
doc.OptionAutoCloseOnEnd = true; 
doc.Save(/* your Xml stream or filename */); 

然後使用常規的.NET XML API(例如,使用XmlDocument的或的XDocument)來處理內容。