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 回答