XML如下,我只关心<a><b></b></a>
的第一级,请注意:在子节点<d></d>
中,也有相同的节点。这是个问题。
<a>
<b>b1</b>
<b>b2</b>
<d>
<a>
<b>d_a_b1</b>
</a>
<a>
<b>d_a_b2</b>
</a>
</d>
<c>c</c>
</a>
我只想获得&gt;的价值b,所以我使用了Jsoup选择器来选择,以下是代码:
def str2 = '''
<a>
<b>b1</b>
<b>b2</b>
<d>
<a>
<b>d_a_b1</b>
</a>
<a>
<b>d_a_b2</b>
</a>
</d>
<c>c</c>
</a>'''
Document doc = Jsoup.parse(str2)
doc.select("a > b").each {
println it.text()
}
但结果是选择器还在<d> </d>
节点下找到了节点,这不是我所关心的..我想得到的结果是:
b1
b2
,实际结果是:
b1
b2
d_a_b1
d_a_b2
任何人都可以帮助选择第一级节点吗?任何评论都非常感谢!
答案 0 :(得分:1)
我不熟悉groovy,但你可以选择像这样的第一级孩子
Document doc = Jsoup.parse(s)
Element a = doc.select("a").first()
System.out.println(doc)
Elements aChildren = a.children()
for(Element element : aChildren) {
println element.select("b").text()
}
但我认为你的例子还有另一个问题。 Jsoup会像这样解析你的XML:
<html>
<head></head>
<body>
<a> <b>b1</b> <b>b2</b>
<d>
</d></a>
<a> <b>d_a_b1</b> </a>
<a> <b>d_a_b2</b> </a>
<c>
c
</c>
</body>
</html>
正如您可以看到标记<a>
后面的</d>
标记已关闭。这是因为HTML中不存在嵌套的<a>
(它将意味着不符合逻辑的嵌套链接),JSoup将为您修复它。
我希望这会有所帮助。正如我所说,我不熟悉groovy
。所以我可能会犯一些语法或逻辑错误。