我正在编写一个 HTML 解析器,它使用 TagSoup 将格式良好的结构传递给 XMLSlurper。
这是通用代码:
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"
}
我希望 each 让我依次选择每个“li”,以便我可以检索相应的 href 和地址详细信息。相反,我得到了这个输出:
#href1#href2: Here is the addressTelephone number: telephoneHere is another addressAnother telephone: 0845 1111111
我检查了网络上的各种示例,这些示例要么处理 XML,要么是单行示例,例如“从该文件中检索所有链接”。似乎 it.h3.a.@href 表达式正在收集文本中的所有 href,即使我将它传递给父“li”节点的引用。
你能告诉我吗:
- 为什么我得到显示的输出
- 如何检索每个“li”项目的 href/address 对
谢谢。