Obteniendo el texto de un nodo usando HtmlAgilityPack

c# html-agility-pack xpath

Pregunta

Tengo el siguiente HTML:

<div class="top">
    <p>Blah.</p>
    I want <em>this</em> text.
</div>

¿Cuál es la notación XPath para extraer la cadena " I want <em>this</em> text. "? EDITAR: No necesariamente quiero una sola expresión XPath para extraer la cadena. La selección de varios nodos y la iteración sobre ellos para producir la oración también sería genial.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(myHtml);
doc.DocumentNode.SelectSingleNode("??????");

Respuesta aceptada

¿Qué quieres extraer, los nodos o una cadena?

Si desea nodos, "I want <em>this</em> text." es un fragmento XML que consta en el nivel superior de dos nodos de texto y un elemento <em> , que tiene un nodo de texto hijo. Como tiene varios nodos en el nivel superior, necesita usar SelectNodes("xpath expression a la @Alejandro") lugar de SelectSingleNode() para extraerlos.

Si desea una cadena, nuevamente debe usar SelectNodes (); y luego itere sobre los nodos seleccionados y concatene el HTML externo de cada uno. Vea aquí un buen ejemplo de algo similar.

Además, no queda claro en su ejemplo qué expresión de XPath en general le brindaría lo que desea. Por ejemplo, ¿quieres todo después de la inicial <p>...</p> en <div class="top"> ? ¿O desea que todo el texto esté bajo <div> excepto todos los elementos <p> ? O tal vez algo más? Por supuesto, si las expresiones XPath de @Alejandro funcionan para ti, entonces ya está lo suficientemente bien especificado.


Respuesta popular

/div[@class='top']/p[.='Blah.']/following-sibling::node()

o

/div[@class='top']/node()[not(self::p)]



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é