À l'aide de XmlSlurper: Comment sélectionner les sous-éléments lors de l'itération sur une GPathResult

Je suis en train d'écrire un analyseur HTML, qui utilise TagSoup de passer une structure formée de XMLSlurper.

Voici généralisées code:

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 { it.@class == 'divclass' }.ol.li.each { linkItem ->
    def link = linkItem.h3.a.@href
    def address = linkItem.address.text()
    println "$link: $address\n"
}

J'attendrais la chaque pour me laisser sélectionner chaque 'li' à son tour afin que je puisse récupérer le correspondant href et les détails de l'adresse. Au lieu de cela, j'obtiens ce résultat:

#href1#href2: Here is the addressTelephone number: telephoneHere is another addressAnother telephone: 0845 1111111

J'ai vérifié divers sur le web et ces soit régler XML, ou sont one-liner exemples comme "récupérer tous les liens à partir de ce fichier". Il semble que l'it.h3.a.@href l'expression est de collecter tous les hrefs dans le texte, même si je suis de passage une référence pour les parents de li' nœud.

Pouvez-vous laissez-moi savoir:

  • Pourquoi je me fais de la sortie montré
  • Comment je peux récupérer le href d'adresse/de paires pour chaque 'li' élément

Grâce.

OriginalL'auteur Andrew Whitehouse | 2009-11-04