遍歷節點的所有後代並逐個檢查它們

c# html-agility-pack linq xpath

我需要在特定網頁中列出記錄。我在一個文本文件中獲得了頁面源代碼。我需要逐個元素遍歷這個節點:

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

對於每個元素,我需要檢查類型(div,span等),它是“id”和它的“class”屬性,以便能夠創建我的記錄列表。我不想要所有s或s的集合。這無濟於事,因為我不知道在循環它們時我將面對哪種元素。我得檢查一下。因為我需要的所有數據都是上面提到的節點集合的子節點。有什麼建議麼?

一般承認的答案

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;

}

熱門答案

我認為讓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)來處理內容。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因