使用JDOM按属性删除元素?

时间:2011-12-19 19:10:06

标签: java xml jdom

我有一个XML文件,结构如下:

<contacts>
    <contact id="0">
        <firstname />
        <lastname />
        <address>
            <street />
            <city />
            <state />
            <zip />
            <country />
        </address>
        <phone />
        <email />
        <continfo>
            <byemail />
            <byphone />
            <bymail />
        </continfo>
        <comments />
        <datecreated />
    </contact>
</contacts>

使用JDOM,我想通过查找id属性来删除整个联系人元素及其所有子元素。但是我在解决这个方面遇到了一些麻烦。我尝试了以下内容:

Element pageRoot = pageXML.getRootElement(); 

                    List<Element> contacts = new ArrayList<Element>(pageRoot.getChildren() ); 
                    Element contact = null;

                    for( Element element : contacts ){
                        String att = element.getAttributeValue("id"); 
                        if( Integer.parseInt(att) == id){
                            contact = (Element) element.clone(); 
                        }
                    }
pageRoot.removeContent(contact); 

然而,这种联系永远不会被删除。如果有人能指出我的方向,那将是伟大的。谢谢。

2 个答案:

答案 0 :(得分:1)

为什么要克隆元素?

您可以直接将其删除:

if ( ... ){
    elementToRemove = (Element) element;
}
...
pageRoot.removeContent (elementToRemove);

答案 1 :(得分:1)

建议(在我看来更容易)使用Iterator.remove()删除元素。您可以在迭代子节点时执行此操作,以避免将元素存储到额外的局部变量。

List children = root.getChildren("foo");
Iterator itr = children.iterator();
while (itr.hasNext()) {
  Element child = (Element) itr.next();
  String att = child.getAttributeValue("id"); 
  if( Integer.parseInt(att) == id){
    itr.remove();
  }
}

此示例改编自JDOM faq