如何从xml文档中删除节点(Dom4J)

时间:2014-07-09 06:12:21

标签: java dom4j

这是我的代码

public Document getNewFeedDocument(Document doc)  {

        Element root = doc.getRootElement();

        List<Node> nodes = doc.selectNodes("Message");

        for(int i=0; i<nodes.size(); i++) {
            String message_ID = ((Element)nodes.get(i)).selectSingleNode("MessageID").getText();
            if(Integer.parseInt(message_ID)%2==0) {
                nodes.get(i).detach();
            }
        }
        try {
            SAXReader reader = new SAXReader();
            return reader.read(new StringReader(root.asXML()));
        } catch(Exception e) {
            return null;
        }
    }

但是这会返回相同的文档,如何获得修改后的文档。

1 个答案:

答案 0 :(得分:1)

我认为selectNodes会创建一个临时文档。迭代原始文档:

private boolean toRemove( Node node ){
    if( ! "Message".equals( node.getName() ) return;
    String message_ID = 
        ((Element)nodes.get(i)).selectSingleNode("MessageID").getText();
    return Integer.parseInt(message_ID)%2 == 0;     
}

public void treeWalk(Element element) {
    for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
        Node node = element.node(i);
        if ( node instanceof Element ) {
            if( toRemove( node ) ){
                 node.detach();
                 i--;
            } else {
                treeWalk( (Element) node );
            }
        }
    }
}

treeWalk( doc.getRootElement() );