HtmlAgilityPack, usando XPath contiene métodos y predicados

contains html-agility-pack xpath

Pregunta

HtmlAgilityPack, usando XPath contiene el método

Estoy usando HtmlAgilityPack y necesito saber si un atributo de clase contiene una palabra específica, ahora tengo esta página:

<div class="yom-mod yom-art-content "><div class="bd">
<p class="first"> ....................
  </p>
</div>
</div>

Estoy haciendo esto:

HtmlDocument doc2 = ...;
List<string> paragraphs = doc2.DocumentNode.SelectNodes("//div[@class = 'yom-mod yom-art-content ']//p").Select(paragraphNode => paragraphNode.InnerHtml).ToList();

Pero es demasiado específico lo que necesito es algo como esto:

List<string> paragraphs = doc2.DocumentNode.SelectNodes("//div[contains(@class, 'yom-art-content']//p").Select(paragraphNode => paragraphNode.InnerHtml).ToList();

Pero no funciona, por favor ayúdame ..

Respuesta aceptada

Quizás el problema es simplemente que te estás perdiendo el paréntesis de cierre en la función contiene ():

//div[contains(@class, 'yom-art-content']//p
                                        v
//div[contains(@class, 'yom-art-content')]//p


List<string> paragraphs = 
        doc2.DocumentNode.SelectNodes("//div[contains(@class, 'yom-art-content')]//p")
            .Select(paragraphNode => paragraphNode.InnerHtml).ToList();

Como sugerencia general, explique qué quiere decir cuando dice cosas como "no funcionó". ¿Sospecho que está recibiendo un mensaje de error que podría ayudar a localizar el problema?


Respuesta popular

En lugar de usar el HAP para esto, busque en CsQuery que proporciona selectores de estilo jQuery.

Parece particularmente adecuado para lo que estás tratando de hacer.

CsQuery es un puerto jQuery para .NET 4. Implementa todos los selectores CSS2 y CSS3, todos los métodos de manipulación DOM de jQuery y algunos de los métodos de utilidad. La mayoría del conjunto de pruebas de jQuery (a partir de 1.6.2) se ha portado a C #.



Related

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é