Problemas para obtener childNodes usando HTMLAgilityPack y XPath

c# html-agility-pack xpath

Pregunta

Estoy tratando de analizar el siguiente HTML. Necesito obtener el texto interno de todos los enlaces bajo una etiqueta h4 con el valor "Título".

<h4>Title</h4>
    <ul>
         <li>
             <a>One</a>
         </li>
         <li>
             <a>Two</a>
         </li>
         <li>
             <a>Three</a>
         </li>
    </ul>

Puedo obtener el elemento h4 ok usando el siguiente código:

var links = document.DocumentNode.SelectNodes("//h4[contains(text(),'Title')]");

El problema viene con tratar de obtener los nodos. He intentado el siguiente código pero ninguno funciona:

var urls = member.SelectNodes(".//a");

foreach (var url in urls)
{
    Console.WriteLine(url.InnerText);
}

Respuesta aceptada

De lo que puedo recopilar, creo que no funciona porque la xpath que está utilizando espera que los nodos sean hijos de su nodo h4, no he probado esto y es posible que falte en la interpretación de sus requisitos, pero ...

var links = document.DocumentNode.SelectNodes("//h4[contains(text(),'Title')]/following-sibling::*[1]//a");

Esto obtendría todos los nodos que se encuentran en el primer hermano del nodo h4. Entonces, en su ejemplo HTML, debería obtener todos los nodos dentro del nodo ul

Espero que esto ayude




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué