Mit XmlSlurper: Wie wählen Sie die sub-Elemente während der Iteration über eine GPathResult

Schreibe ich ein HTML-parser, die verwendet TagSoup passieren eine wohlgeformte Struktur zu XMLSlurper.

Hier ist der verallgemeinerte 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"
}

Ich würde erwarten, dass die einzelnen, lassen Sie mich wählen Sie die einzelnen 'li' in umdrehung, so kann ich abrufen die entsprechende href-und Adressdaten. Stattdessen erhalte ich diese Ausgabe:

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

Ich habe verschiedene Beispiel auf der web-und diese entweder Umgang mit XML, oder sind one-liner Beispiele wie "abrufen alle links aus dieser Datei". Es scheint, dass die it.h3.a.@href Ausdruck sammeln alle hrefs in den text, obwohl ich die übergabe einer Referenz auf das parent - 'li' - Knoten.

Können Sie lassen Sie mich wissen:

  • Warum bin ich immer die gezeigte Ausgabe
  • Wie kann ich abrufen die href - /Adress-Paare für jeden 'li' - Element

Dank.

Schreibe einen Kommentar