我有一个XML文档,我想使用XMLslurper进行解析。这实际上工作得很好,但是在读取某些标签时出现问题,因为在同一节点中可能有多行,例如:
<element name="ABC">
<description>lorem ipsum</description>
<description>foo</description>
<description type="DETAILED">some text</description>
</element>
如果现在使用element.description.text()
,我将得到lorem ipsumfoosome text
作为输出。我该如何编码,以便:
description
标签description type="DETAILED"
标签答案 0 :(得分:2)
当您使用XmlSlurper
解析XML文档时,您将访问element
标签作为实现Iterable
接口的NodeChildren
。因此,您可以应用以下操作:
要获取第一个描述标签(Iterable.first()
):
element.description.first()?.text()
要获取类型为DETAILED
(Collection.find(Closure cl)
)的第一个描述标签:
element.description.find { it.@type == 'DETAILED' }?.text()
要获取所有描述,并用空格(Iterable.join(String separator)
)隔开:
element.description.join(' ')
完整示例:
def xml = '''
<element name="ABC">
<description>lorem ipsum</description>
<description>foo</description>
<description type="DETAILED">some text</description>
</element>
'''
def element = new XmlSlurper().parseText(xml)
println element.description.first()?.text()
println element.description.find { it.@type == 'DETAILED' }?.text()
println element.description.join(' ')
输出:
lorem ipsum
some text
lorem ipsum foo some text