这是我的代码
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;
}
}
但是这会返回相同的文档,如何获得修改后的文档。
答案 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() );