在groovy XMLslurper中过滤特定标记

在groovy XMLslurper中过滤特定标记,xml,groovy,Xml,Groovy,我有一个xml文档,我想用XMLslurper解析它。这实际上工作得很好,但我在读取一些标记时遇到问题,因为在同一个节点中可能有多行标记,如: <element name="ABC"> <description>lorem ipsum</description> <description>foo</description> <description type="DETAILED">some text&

我有一个xml文档,我想用XMLslurper解析它。这实际上工作得很好,但我在读取一些标记时遇到问题,因为在同一个节点中可能有多行标记,如:

<element name="ABC">
    <description>lorem ipsum</description>
    <description>foo</description>
    <description type="DETAILED">some text</description>
</element>

乱数假文
福
一些文本
如果我现在使用
element.description.text()
,我会得到
lorem ipsumfoosome文本作为输出。如何对其进行编码,以便:

  • 仅读取第一个
    说明
    标记
  • 仅读取(第一个)
    description type=“DETAILED”
    标记
  • 读取所有标签,但至少用空格分隔

  • 当您使用
    XmlSlurper
    解析XML文档时,您可以访问
    元素
    标记,作为实现
    Iterable
    接口的标记。这就是为什么您可以应用以下操作:

  • 要获取第一个描述标记():

  • 要获取类型为
    DETAILED
    ()的第一个描述标记,请执行以下操作:

  • 要获取由空格()分隔的所有描述,请执行以下操作:

  • 完整示例:

    defxml=''
    乱数假文
    福
    一些文本
    '''
    def element=new XmlSlurper().parseText(xml)
    println元素.description.first()?.text()
    println element.description.find{it@type=='DETAILED'}?.text()
    println元素.description.join(“”)
    
    输出:

    lorem ipsum
    some text
    lorem ipsum foo some text
    
    element.description.find { it.@type == 'DETAILED' }?.text()
    
    element.description.join(' ')
    
    lorem ipsum
    some text
    lorem ipsum foo some text