遍历节点的所有后代并逐个检查它们

时间:2012-11-09 09:51:28

标签: c# linq xpath html-agility-pack

我需要列出特定网页中的记录。我在一个文本文件中获得了页面源代码。我需要逐个元素地遍历这个节点:

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

对于每个元素,我需要检查类型(div,span等),它" id"而它" class"属性可以创建我的记录列表。我不想要所有s或s的集合。这无济于事,因为我不知道在循环它们时我将面对哪种元素。我得检查一下。因为我需要的所有数据都是上面提到的节点集合的子节点。有什么建议吗?

2 个答案:

答案 0 :(得分: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;

}

答案 1 :(得分:0)

我认为将HtmlAgilityPack转换为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)来处理内容。