我认为我想做的很简单:使用 XmlSlurper 将子节点动态添加到节点(甚至不知道要添加的节点的名称 - 开发一些框架)。
为了便于解释,像这样:
def colorsNode = new XmlSlurper().parseText("""
<colors>
<color>red</color>
<color>green</color>
</colors>""")
NodeChild blueNode = new XmlSlurper().parseText("<color>blue</color>") // just for illustration. The actual contents are all dynamic
colorsNode.appendNode(blueNode) // In real life, I need to be be able to take in any node and append to a given node as child.
我期望生成的节点与以下内容相同:
“””
<colors>
<color>red</color>
<color>green</color>
<color>blue</color>
</colors>"""
但是附加的结果是:
colorsNode
.node
.children => LinkedList[Node('red') -> Node('green') -> <b>NodeChild</b>(.node='blue')]
换句话说,附加到 LinkedList 的是包装新节点的 NodeChild,而不是节点本身。
毫不奇怪,查看 NodeChild.java 的源代码:
protected void appendNode(final Object newValue) {
this.node.appendNode(newValue, this);
}
好吧,我很乐意将我的代码修改为:
colorsNode.appendNode(blueNode<b>.node</b>)
不幸的是 NodeChild.node 是私有的 :(,不知道为什么!什么是实现我正在尝试的体面的方法?我在网上看不到任何解决方案。
我能够通过调整 Groovy 源代码并公开 NodeChild.node 来完成我的原型设计工作,但现在需要找到一个合适的解决方案。
任何帮助,将不胜感激。
谢谢,阿比马修