J'écris un analyseur HTML, qui utilise TagSoup pour passer une structure bien formée à XMLSlurper.Utilisation de XmlSlurper: Comment sélectionner des sous-éléments lors de l'itération sur un GPathResult
Voici le code généralisé:
def htmlText = """
<html>
<body>
<div id="divId" class="divclass">
<h2>Heading 2</h2>
<ol>
<li><h3><a class="box" href="#href1">href1 link text</a> <span>extra stuff</span></h3><address>Here is the address<span>Telephone number: <strong>telephone</strong></span></address></li>
<li><h3><a class="box" href="#href2">href2 link text</a> <span>extra stuff</span></h3><address>Here is another address<span>Another telephone: <strong>0845 1111111</strong></span></address></li>
</ol>
</div>
</body>
</html>
"""
def html = new XmlSlurper(new org.ccil.cowan.tagsoup.Parser()).parseText(htmlText);
html.'**'.grep { [email protected] == 'divclass' }.ol.li.each { linkItem ->
def link = [email protected]
def address = linkItem.address.text()
println "$link: $address\n"
}
Je me attends à chaque me permettre de sélectionner chaque « li » à son tour pour que je puisse récupérer les détails de href et adresse correspondants. Au lieu de cela, je reçois cette sortie:
#href1#href2: Here is the addressTelephone number: telephoneHere is another addressAnother telephone: 0845 1111111
J'ai vérifié divers exemple sur le web et ceux-ci soit traiter avec XML, ou sont des exemples d'une doublure comme « récupérer tous les liens de ce fichier ». Il semble que l'expression it.h3.a. @ href collecte tous les hrefs dans le texte, même si je lui passe une référence au nœud parent 'li'.
Pouvez-vous me faire savoir:
- Pourquoi je reçois maintenant le résultat
- Comment puis-je récupérer les paires href/adresse pour chaque 'li' article
Merci.
Excellente réponse! –