java - 从 XML 文件中删除节点(DOM4J、JAVA)

标签 java dom4j

由于与该主题相关的所有其他问题都涉及特定的编程问题(例如,“当我尝试这个和那个时我得到一个 NullPointerException”)并且答案是修复编程错误,这里是以下问题的简单解决方案:

如何使用 DOM4J 从 XML 文件中删除节点?

最佳答案

假设您已经有了要删除的节点:

  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 语句。

简短说明:

  1. 需要获取文档并将其存储在局部变量中, 因为在分离节点后,您无法通过 调用 node.getDocument()
  2. 在节点上调用 detach() 将从文档对象(而不是文件)中删除该节点
  3. 需要使用 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

关于java - 从 XML 文件中删除节点(DOM4J、JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36422776/

相关文章:

java - 不需要的 Dom4J 命名空间

java - 如何在 java 中以 ISO 日期格式打印当前时间和日期?

java - 为什么我的 xml 的 JAXB namespace 设置为默认 ns1?

java - 如何在 Lucene ( JAVA ) 的 BM25 实现中计算 avgLengthPath

java - 在 dom4j 中指定 XML 路径

java - 如何解决XML转换问题?

java - 开源许可证,哪一个?

java - getRowData() 的确切语义?

java - 将 XML 文档转换为 DOM4J 文档以提取特定节点的值

java - 将 dom4j 文档写入 xml 文件并转义 '\r\n\'