解决方法
假设您已经拥有要删除的节点:
Document document = node.getDocument(); node.detach(); XMLWriter writer = new XMLWriter(new FileWriter(document.getPath() + document.getName()),OutputFormat.createPrettyPrint()); writer.write(document); writer.close();
try-catch语句被省略.
简短说明:
>需要获取文档并将其存储在本地变量中,
因为在分离节点后,您无法获取文档
调用node.getDocument()
>在节点上调用detach()将从文档对象中删除节点(而不是从文件中删除)
>如果您之后不希望文档中有任何空白行,则需要使用OutputFormat.createPrettyPrint()创建XMLWriter
有关更完整的示例,请参阅以下JUnit测试:
@Test public void dom4j() throws DocumentException,IOException { String absolutePath = Paths.get(PATH_TO_XML).toAbsolutePath().toString(); SAXReader reader = new SAXReader(); Document document = reader.read(absolutePath); Node node = document.selectSingleNode(XPATH_TO_NODE); node.detach(); XMLWriter writer = new XMLWriter(new FileWriter(absolutePath),OutputFormat.createPrettyPrint()); writer.write(document); writer.close(); }
有关DOM4J的更多信息,请参阅:
http://dom4j.sourceforge.net/dom4j-1.6.1/guide.html
有关XPath语法的更多信息:http://www.w3schools.com/xsl/xpath_syntax.asp