groovy を使用して、ノードを特定の場所に単純に追加しようとしています。私のソーススキーマは次のようになります
<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 をそのままにして、指定した名前空間の単一ノードを追加しますか?
1 つの注意: 私たちは多くのメッセージを処理しており、最も外側の名前空間 (上記の例では s1) を事前に知ることはできませんが、それでも、xml の「愚かな」処理である手法を探しているだけです。
ありがとう!