Groovy XMLSlurper 如何在现有元素之后追加子元素?
Groovy XMLSlurper how to append a child element after an existing element?
我正在使用 XMLSlurper 解析 Groovy 中的 XML。
应将一个元素添加到已解析的 XML(GPathResult 实例)中,但新元素应位于现有元素之后的特定位置,以符合 XML 架构.
现在唯一可行的是在解析的 XML 末尾附加新节点,这违反了 XSD.
有没有办法在现有元素之后追加新元素?类似于 "appendSibling()"?
结构是这样的:
<root>
<name>xxx</name>
<state>xxx</state>
</root>
我需要 "id" 在 "name" 之后和 "root" 之下:
<root>
<name>xxx</name>
<id>xxx</id>
<state>xxx</state>
</root>
使用 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 )
我正在使用 XMLSlurper 解析 Groovy 中的 XML。
应将一个元素添加到已解析的 XML(GPathResult 实例)中,但新元素应位于现有元素之后的特定位置,以符合 XML 架构.
现在唯一可行的是在解析的 XML 末尾附加新节点,这违反了 XSD.
有没有办法在现有元素之后追加新元素?类似于 "appendSibling()"?
结构是这样的:
<root>
<name>xxx</name>
<state>xxx</state>
</root>
我需要 "id" 在 "name" 之后和 "root" 之下:
<root>
<name>xxx</name>
<id>xxx</id>
<state>xxx</state>
</root>
使用 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 )