2 votes

Extraire le texte entre deux balises <hr> en HTML sans CSS

En utilisant Jsoup, quelle serait l'approche optimale pour extraire un texte dont le motif est connu ( [number]%%[number] ) mais réside dans une page HTML qui n'utilise ni CSS, ni divs, ni spans, ni classes, ni autre identification d'aucun type (oui, une vieille page HTML sur laquelle je n'ai aucun contrôle) ?

La seule chose qui identifie de manière cohérente ce segment de texte (et qui est garantie de le rester) est le HTML. toujours ressemble à ceci (dans un corps plus large de HTML) :

<hr>
2%%17
<hr>

(Les chiffres 2 et 17 ne sont que des exemples. Il pourrait s'agir de n'importe quels chiffres et, en fait, ce sont les deux variables que je dois extraire de manière fiable de cette page HTML).

Si ce texte se trouvait à l'intérieur d'une enveloppe identifiant de manière unique <span> o <div> je n'aurais aucun problème à l'extraire en utilisant Jsoup. Le problème, c'est que ce n'est pas le cas et que le seul moyen auquel je pense pour le moment (et qui est no élégant du tout) est de traiter le brut HTML à travers une regex.

Traiter le HTML brut à l'aide d'une regex semble cependant inefficace car il est déjà analysé via Jsoup dans un DOM.

Des suggestions ?

2voto

BalusC Points 498232

Que pensez-vous de ça ?

Document document = Jsoup.connect(url).get();
Elements hrs = document.select("hr");
Pattern pattern = Pattern.compile("(\\d+%%\\d+)");

for (Element hr : hrs) {
    String textAfterHr = hr.nextSibling().toString();
    Matcher matcher = pattern.matcher(textAfterHr);

    while (matcher.find()) {
        System.out.println(matcher.group(1)); // <-- There, your data.
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X