使用XOM插入其他父XML元素

时间:2012-03-15 11:43:09

标签: java xml xom

使用以下XML:

<parent>
    <child>Stuff</child>
    <child>Stuff</child>
</parent>

使用XPath我查询子元素,并根据一些条件,我想在其中一些上面追加一个额外的父级别:

<parent>
    <extraParent>
        <child>Stuff</child>
    </extraParent>
    <child>Stuff</child>
</parent>

最好的方法是什么?

我正在思考以下几点:

Nodes childNodes = parent.query("child");
for (int i = 0; i < childNodes.size(); i++) {
    Element currentChild = (Element) childNodes.get(i);
    if (someCondition) {
        ParentNode parent = currentChild.getParent();
        currentChild.detach();
        Element extraParent = new Element("extraParent");
        extraParent.appendChild(currentChild);
        parent.appendChild(extraParent);
    }
}

但我想保留订单。可能这可以使用parent.insertChild(child, position)

来完成

编辑:我认为以下情况有效,但我很好奇是否有人有更好的方法:

Elements childElements = parent.getChildElements();
for (int i = 0; i < childElements.size(); i++) {
    Element currentChild = childElements.get(i);
    if (someCondition) {
        ParentNode parent = currentChild.getParent();
        currentChild.detach();
        Element extraParent = new Element("extraParent");
        extraParent.appendChild(currentChild);
        parent.insertChild(extraParent,i);
    }
}

编辑2:这可能更好,因为它允许您将其他元素与您不感兴趣的子元素混合在一起:

Nodes childNodes = parent.query("child");
for (int i = 0; i < childNodes.size(); i++) {
    Element currentChild = (Element) childNodes.get(i);
    if (someCondition) {
        ParentNode parent = currentChild.getParent();
        int currentIndex = parent.indexOf(currentChild);
        currentChild.detach();
        Element extraParent = new Element("extraParent");
        extraParent.appendChild(currentChild);
        parent.insertChild(extraParent,currentIndex);
    }
}

1 个答案:

答案 0 :(得分:1)

这似乎充分起作用:

Nodes childNodes = parent.query("child");
for (int i = 0; i < childNodes.size(); i++) {
    Element currentChild = (Element) childNodes.get(i);
    if (someCondition) {
        ParentNode parent = currentChild.getParent();
        int currentIndex = parent.indexOf(currentChild);
        currentChild.detach();
        Element extraParent = new Element("extraParent");
        extraParent.appendChild(currentChild);
        parent.insertChild(extraParent,currentIndex);
    }
}