私は次のシナリオを持っています:私はXMLドキュメントを持っています、例えばこのように
<someRootElement>
<tag1>
<tag2
someKey=someValue
someKey2=someValue2
/>
<tag3/>
<tag4
newKey=newValue
newKey2=newValue2
/>
</tag1>
</someRootElement>
ここで、子ノードを失うことなく、親tag1をreallyCoolTagと呼びたいと思います。私は次のことを試しましたが、残念ながら私が望むようには機能しません(しかし、理由はわかりますが、b / cに何かが欠けていると思います):
// the new element:
Element neu = doc.createElement( newValue );
// append it to the root:
root.appendChild( neu );
// get all the child nodes:
NamedNodeMap nnm = nodes.item(i).getAttributes();
for( int dg = 0; dg < nnm.getLength(); dg++ ){
neu.setAttribute( nnm.item( dg ).getNodeName(),
nnm.item( dg ).getNodeValue() );
}
//---------------------------------------------------------
// HERE I GUESS I AM MISSING THE PART WHERE THE CHILD NODES
// ARE BEING APPENDED TO THE NEW NODE?????
//---------------------------------------------------------
// nodes.item(i) := the old value (nodes := is a NodeList
root.replaceChild( neu, nodes.item(i));
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource( doc );
StreamResult result = new StreamResult( xml );
transformer.transform( source, result );
nodes.item( i ).getParentNode().removeChild( nodes.item(i) );
これはある程度機能します。前述したように、子ノードが追加されている部分が欠落していると思いますが、実際に知りたかったのは、親ノードの名前を変更する簡単な方法があるかどうかです。すべてをコピーして全体を置き換える必要がありますか?
事前にThnx!!!