简体   繁体   English

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

[英]How to delete nodes from a xml document (Dom4J)

Here is my code 这是我的代码

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;
        }
    }

But this returns the same document, How can I get modified document. 但这会返回相同的文档,我该如何获取修改后的文档。

I think that the selectNodes creates a temporary document. 我认为selectNodes创建一个临时文档。 Iterate over the original doc: 遍历原始文档:

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() );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM