我正在尝试使用 groovy 将节点简单地添加到特定位置的 a 。我的源架构看起来像这样
<s1:RootNode
xmlns:s1="http://localhost/s1schema"
xmlns:s2="http://localhost/s2schema"
xsi:schemaLocation="http://localhost/s1schema s1schema.xsd
http://localhost/s2schema s2schema.xsd">
<s1:aParentNode>
<s2:targetNode>
<s2:childnode1 />
<s2:childnode2 />
<s2:childnode3 />
<s2:childnode4 />
</s2:targetNode>
</s1:aParentNode>
</s1:RootNode>
我想简单地添加一个与其他子节点内联的新子节点以进行输出
<s1:RootNode
xmlns:s1="http://localhost/s1schema"
xmlns:s2="http://localhost/s2schema"
xsi:schemaLocation="http://localhost/s1schema s1schema.xsd
http://localhost/s2schema s2schema.xsd">
<s1:aParentNode>
<s2:targetNode>
<s2:childnode1 />
<s2:childnode2 />
<s2:childnode3 />
<s2:childnode4 />
<s2:childnode5 >value</s2:childnode5>
</s2:targetNode>
</s1:aParentNode>
</s1:RootNode>
为此,我有以下简单的 groovy 脚本
def data = 'value'
def root = new XmlSlurper(false,true).parseText( sourceXML )
root.'aParentNode'.'topNode'.appendNode{
's2:childnode5' data
}
groovy.xml.XmlUtil.serialize(root);
但是,当我这样做时,将删除应用于根节点的名称空间和 schemaLocations。和命名空间,但不是模式位置被添加到每个子节点。
这导致下游的验证问题。
我如何简单地处理这个 xml。不执行验证并保留 xml 并添加我指定的命名空间的单个节点?
注意:我们处理许多消息,我不会事先知道最外层的命名空间(上例中的 s1),但即便如此,我真的只是在寻找一种对 xml 进行“愚蠢”处理的技术
谢谢!