0

Java DOM を使用して xml ファイルにノードを挿入したいと考えています。私は実際にダミーファイルの内容を元のように変更するために多くの内容を編集しています。

次のファイルの間にオープンノードとクローズノードを追加したいと思います。

            <?xml version="1.0" encoding="utf-8"?>
            <Memory xmlns:xyz="http://www.w3.org/2001/XMLSchema-instance"   
            xmlns:abc="http://www.w3.org/2001/XMLSchema" Derivative="ABC"            
            xmlns="http://..">

       ///////////<Address> ///////////(which I would like to insert)

            <Block ---------
            --------
            -------
            />

      ////////// </Address> /////////(which I would like to insert)

            <Parameters Thread ="yyyy" />
            </Memory>

xml ファイルの間に -- を挿入する方法を教えてください。

前もって感謝します。!

私がやろうとしたことは次のとおりです。

            Element child = doc.createElement("Address");
    child.appendChild(doc.createTextNode("Block"));
    root.appendChild(child);

しかし、これにより次のような出力が得られます。

        <Address> Block </Address> and not the way i expect :(

そして今、私が試みたのは、これらの行を追加することです。

            Element cd = doc.createElement("Address");
            Node Block = root.getFirstChild().getNextSibling();
        cd.appendChild(Block);
        root.insertBefore(cd, root.getFirstChild());

それでも、これは私が探している出力ではありません。この出力は---------として得られました

4

3 に答える 3

2

あなたが欲しいのはおそらく:

Node parent = block.getParentNode()
Node blockRemoved = parent.removeChild(block);
// Create address
parent.appendChild(address);
address.appendChild(blockRemoved);

これは、W3CDOMの下の別の場所にノードを再接続するための標準的な方法です。

于 2012-04-14T23:26:47.523 に答える
1

ここ:

DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = b.parse(...);

// Parent of existing Block elements and new Address elemet
// Might be retrieved differently depending on 
// actual structure
Element parent = document.getDocumentElement();
Element address = document.createElement("address");

NodeList nl = parent.getElementsByTagName("Block");
for (int i = 0; i < nl.getLength(); ++i) {
    Element block = (Element) nl.item(i);
    if (i == 0)
        parent.insertBefore(address, block);
    parent.removeChild(block);
    address.appendChild(block);
}

// UPDATE: how to pretty print

LSSerializer serializer = 
    ((DOMImplementationLS)document.getImplementation()).createLSSerializer();
serializer.getDomConfig().setParameter("format-pretty-print", Boolean.TRUE);
LSOutput output = 
    ((DOMImplementationLS)document.getImplementation()).createLSOutput();
output.setByteStream(System.out);
serializer.write(document, output);
于 2012-04-16T00:37:21.823 に答える
0

W3C DOM (例: http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html ) を使用していると思います。もしそうなら試してみてください

insertBefore(address, block);
于 2012-04-14T19:59:11.533 に答える