2011-06-08 29 views
14
<html> 
    <body> 
     <div class="main"> 
      <div class="submain"><h2></h2><p></p><ul></ul> 
      </div> 
      <div class="submain"><h2></h2><p></p><ul></ul> 
      </div> 
     </div> 
    </body> 
</html> 

he cargado el html en un HtmlDocument. Luego seleccioné el XPath como submain. Entonces no sé cómo acceder a cada etiqueta, por ejemplo, h2, p.cómo acceder nodo hijo del nodo en el paquete htmlagility

HtmlAgilityPack.HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@class=\"submain\"]"); 
foreach (HtmlAgilityPack.HtmlNode node in nodes) {} 

si uso node.InnerText me sale todos los textos y InnerHtml también no es útil. ¿Cómo seleccionar etiquetas separadas?

Respuesta

25

La siguiente ayuda:

HtmlAgilityPack.HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@class=\"submain\"]"); 
foreach (HtmlAgilityPack.HtmlNode node in nodes) { 
    //Do you say you want to access to <h2>, <p> here? 
    //You can do: 
    HtmlNode h2Node = node.SelectSingleNode("./h2"); //That will get the first <h2> node 
    HtmlNode allH2Nodes= node.SelectNodes(".//h2"); //That will search in depth too 

    //And you can also take a look at the children, without using XPath (like in a tree):   
    HtmlNode h2Node = node.ChildNodes["h2"]; 
} 
2

De memoria, creo que cada uno tiene su propia Node colección ChildNodes, por lo que dentro de su bloque for…each usted debería ser capaz de inspeccionar node.ChildNodes.

0

Usted está buscando Descendientes

var firstSubmainNodeName = doc 
    .DocumentNode 
    .Descendants() 
    .Where(n => n.Attributes["class"].Value == "submain") 
    .First() 
    .InnerText; 
Cuestiones relacionadas