Sto scrivendo un parser HTML, che utilizza TagSoup per passare una struttura ben formata a XMLSlurper.Utilizzo di XmlSlurper: Come selezionare elementi secondari durante l'iterazione su GPathResult
Ecco il codice generalizzato:
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"
}
mi aspetterei il ciascuno per mi permette di selezionare ogni 'li', a sua volta in modo da poter recuperare le corrispondenti href e indirizzo. Invece, io sono sempre questo output:
#href1#href2: Here is the addressTelephone number: telephoneHere is another addressAnother telephone: 0845 1111111
Ho controllato vari esempio sul web e questi sia occupo di XML, o sono esempi uno-liner come "recuperare tutti i link di questo file". Sembra che l'espressione href di it.h3.a. @ stia raccogliendo tutti gli hrefs nel testo, anche se sto passando un riferimento al nodo "li" principale.
Può farmi sapere:
- Perché sto ottenendo l'output mostrato
- Come posso recuperare le coppie href/indirizzo per ogni voce 'li'
Grazie.
Ottima risposta! –