【问题标题】:Groovy XMLSlurper how to append a child element after an existing element?Groovy XMLSlurper 如何在现有元素之后附加子元素?
【发布时间】:2018-04-20 04:46:26
【问题描述】:

我正在使用 XMLSlurper 在 Groovy 中解析 XML。

应将一个元素添加到已解析的 XML(GPathResult 实例)中,但新元素应位于现有元素之后的特定位置,以符合 XML Schema。

目前唯一可行的方法是在解析的 XML 末尾附加新节点,这违反了 XSD。

有没有办法在现有元素之后追加新元素?像“appendSibling()”这样的东西?

结构是这样的:

<root>
  <name>xxx</name>
  <state>xxx</state>
</root>

我需要在“name”之后和“root”下的“id”:

<root>
  <name>xxx</name>
  <id>xxx</id>
  <state>xxx</state>
</root>

【问题讨论】:

    标签: xml groovy xmlslurper


    【解决方案1】:

    使用replaceNode 找到了一个简单的解决方案,几乎是一条线。这会在被示例节点 + 新节点覆盖的现有节点之后添加 require 节点。唯一的问题是恢复新节点不起作用,因为 XmlSlurper 很懒!

    import groovy.util.XmlSlurper
    
    def xml = new XmlSlurper().parseText('''
    <root>
      <name>xxx</name>
      <state>xxx</state>
    </root>
    ''')
    
    xml.name.replaceNode { node ->
       mkp.yield(node)
       id('xxxx')
    }
    
    println xml.children()*.name() // new id node doesn't get printted because it was not evaluated (XmlSlurper is lazy!)
    
    groovy.xml.XmlUtil.serialize( xml )
    

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      相关资源
      最近更新 更多