XPath à la première occurrence d'un élément avec une longueur de texte> = 200 caractères

c# html html-agility-pack xpath

Question

Comment obtenir le premier élément qui contient un texte interne (texte brut, rejetant les autres enfants) de 200 caractères ou plus?

J'essaie de créer un analyseur HTML comme Embed.ly et j'ai mis en place un système de repli dans lequel je vérifie d'abord og:description , puis je recherche cette occurrence et ensuite seulement la balise méta description .

En effet, la plupart des sites qui incluent même une meta description décrivent leur site dans cette balise, au lieu du contenu de la page en cours.

Exemple:

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

Quel sélecteur pourrais-je utiliser pour obtenir la partie de 200 caractères de ce fragment HTML? Je ne veux pas plus de choses non plus, je ne me soucie pas de quel élément il s'agit (sauf pour <script> ou <style> ), tant qu'il s'agit du premier texte brut contenant au moins 200 caractères.

À quoi devrait ressembler la requête XPath?

Réponse acceptée

Utiliser :

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

Remarque : Si le document est un document XHTML (et que cela signifie que tous les éléments figurent dans l'espace de noms xhrml), l'expression ci-dessus doit être spécifiée comme suit:

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

où le préfixe "x:" doit être lié à l'espace de noms XHTML - "http://www.w3.org/1999/xhtml" (ou autant d'API XPath appellent cela - l'espace de nom doit être " Enregistré " avec ceci préfixe)


Réponse populaire

Je voulais dire quelque chose comme ça:

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

Semble fonctionner assez bien.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi