2012-11-09 41 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)来处理内容。