0

DOM4JとXMLでノードを既存のノードに追加する方法は?

例に従うと、非常に簡単で、要素が既にある場合はうまく機能します。

Element root = doc.getRootElement();
Element someElement = root.addElement("some");
Element anotherElement = someElement.addElement("another");

など。Element オブジェクトがあれば簡単です。

しかし、参照を失ったり、xml をロードしてゼロから作成しないと、必要な場所にノード / 要素を正確に追加する方法について頭を悩ませることができなくなります。

したがって、特定の質問は次のとおりです。ドキュメントとその中の特定の要素が与えられた場合、その下に要素を追加するにはどうすればよいですか? ドキュメント全体を反復処理する必要がありますか? Xpath .addElement を持たないノードを返すことしかできず、それを要素に変換することはできません。ID=? を追加する以外に、単に困惑しています すべての単一のノードに、何かを正確に配置する方法を理解できません。どんな助けや指示も大歓迎です。

4

1 に答える 1

3

反復して必要なノードを確認し、新しく作成されたノードをそれに追加するか、xpath 式を使用して特定のノードを取得し、それに新しいノードを追加することができます。

反復:

    public void iterateNodes() {
     SAXReader reader = new SAXReader();
     Document document = reader.read("yourxml.xml");
     Element root = document.getRootElement();
     for ( Iterator i = root.elementIterator(); i.hasNext(); ){
           Element row = (Element) i.next();
           Iterator itr = row.elementIterator();
           while(itr.hasNext()) {
                Element child = (Element) itr.next();
                String name = child.getQualifiedName();
                if(name.equals("requiredName") {
                   //create node and add it to child.
                }   
           }
     }
 }

XPath:

public void addNodeUsingXpath() {
    SAXReader reader = new SAXReader();
     Document document = reader.read("yourxml.xml");
        String xpathExpression = "yourxpath";
        List<Node> nodes = document.selectNodes(xpathExpression);
        // nodes will have all the child nodes under your Xpath.
        for (Node node : nodes) {
           //get the required node and add your new node to specific node.
            if(node instanceof Element) {
                 Element e = (Element) node;
                 e.addElement("newElement");
                 ....
            }
        }
}
于 2013-03-06T01:42:37.280 に答える