过滤Groovy XMLslurper中的特定标签

时间:2018-09-24 09:55:31

标签: xml groovy

我有一个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作为输出。我该如何编码,以便:

  1. 仅读取第一个description标签
  2. 仅读取第一个description type="DETAILED"标签
  3. 读取所有标签,但至少用空格隔开

1 个答案:

答案 0 :(得分:2)

当您使用XmlSlurper解析XML文档时,您将访问element标签作为实现Iterable接口的NodeChildren。因此,您可以应用以下操作:

  1. 要获取第一个描述标签(Iterable.first()):

    element.description.first()?.text()
    
  2. 要获取类型为DETAILEDCollection.find(Closure cl))的第一个描述标签:

    element.description.find { it.@type == 'DETAILED' }?.text()
    
  3. 要获取所有描述,并用空格(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