XPath alla prima occorrenza di un elemento con lunghezza del testo> = 200 caratteri

c# html html-agility-pack xpath

Domanda

Come posso ottenere il primo elemento che ha un testo interno (testo normale, scartando altri bambini) di almeno 200 caratteri?

Sto cercando di creare un parser HTML come Embed.ly e ho impostato un sistema di fallback in cui prima cerco og:description , quindi cercherò questa occorrenza e solo per il meta tag description .

Questo perché la maggior parte dei siti che includono anche meta description descrivono il loro sito in quel tag, invece del contenuto della pagina corrente.

Esempio:

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

Quale selettore potrei usare per ottenere la porzione di 200 caratteri di quel frammento HTML? Non voglio neanche un po 'di roba , non mi interessa quale sia l'elemento (tranne per <script> o <style> ), purché sia ​​il primo testo in chiaro a contenere almeno 200 caratteri.

Come dovrebbe apparire la query XPath?

Risposta accettata

Usa :

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

Nota : se il documento è un documento XHTML (e ciò significa che tutti gli elementi si trovano nello spazio dei nomi xhrml), l'espressione sopra dovrebbe essere specificata come:

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

dove il prefisso "x:" deve essere associato allo spazio dei nomi XHTML - "http://www.w3.org/1999/xhtml" (o come lo chiamano molte API XPath - lo spazio dei nomi deve essere " Registrato " con questo prefisso)


Risposta popolare

Intendevo qualcosa del genere:

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

Sembra funzionare abbastanza bene.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché