XPath a la primera aparición del elemento con longitud de texto> = 200 caracteres

c# html html-agility-pack xpath

Pregunta

¿Cómo obtengo el primer elemento que tiene un texto interno (texto plano, descartando otros niños) de 200 o más caracteres de longitud?

Estoy tratando de crear un analizador HTML como Embed.ly y he configurado un sistema de fallbacks en el que primero verifico la og:description de og:description luego buscaría esta aparición y solo luego la etiqueta meta de description .

Esto se debe a que la mayoría de los sitios que incluso incluyen una meta description describen su sitio en esa etiqueta, en lugar de los contenidos de la página actual.

Ejemplo:

<html>
    <body>
        <div>some characters
            <p>200 characters <span>some more stuff</span></p>
        </div>
    </body>
</html>

¿Qué selector podría usar para obtener la porción de 200 caracteres de ese fragmento HTML? Tampoco quiero más cosas , no me importa qué elemento sea (excepto <script> o <style> ), siempre que sea el primer texto sin formato que contenga al menos 200 caracteres.

¿Cómo debería ser la consulta XPath?

Respuesta aceptada

Uso :

(//*[not(self::script or self::style)]/text()[string-length() > 200])[1]

Nota : En caso de que el documento sea un documento XHTML (y eso significa que todos los elementos están en el espacio de nombres xhrml), la expresión anterior debe especificarse como:

(//*[not(self::x:script or self::x:style)]/text()[string-length() > 200])[1]

donde el prefijo "x:" debe vincularse al espacio de nombres XHTML - "http://www.w3.org/1999/xhtml" (o como lo llaman muchas APIs de XPath, el espacio de nombres debe estar " Registrado " con esto prefijo)


Respuesta popular

Me refiero a algo como esto:

root.SelectNodes("html/body/.//*[(name() !='script') and (name()!='style')]/text()[string-length() > 200]")

Parece funcionar bastante bien.



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é