【问题标题】:xml Java won't delete the elementxml Java 不会删除元素
【发布时间】:2016-06-05 01:37:45
【问题描述】:

我正在尝试使用 removeChild() 从 xml 文件中删除一个元素。虽然说操作成功,但它仍然存在,可以打印。

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(new File("/home/sr-user1/Téléchargements/Test/intense172E.xml"));

        Element output = (Element) doc.getElementsByTagName("output").item(0);

         output.getParentNode().removeChild(output);
         System.out.println(output.getTextContent());

【问题讨论】:

  • 你打印的是output.getTextContent(),而不是doc...

标签: java xml dom


【解决方案1】:

方法

 output.getParentNode().removeChild(output);     

将从父节点(在您的情况下为 doc)中删除该节点,但您仍将拥有有关该节点的信息。既然你在打印

 output.getTextContent()     

您仍在接收节点中存在的文本。您需要打印 doc 的内容以检查它是否已成功从原始 xml 中删除。

编辑:如果你想修改原始的xml文件,你需要通过这样做重新编写它:

 XMLOutputter xmlOutput = new XMLOutputter();
 xmlOutput.setFormat(Format.getPrettyFormat());
 xmlOutput.output(doc, new FileWriter("c:\\your_path\\file.xml"));

【讨论】:

  • 那么如何彻底删除节点呢?
  • 你为什么要这样做? “输出”只是一个变量,只要您不使用它,它就会在某个时候被 java 垃圾收集器删除。只要您在原始文档中没有它,为什么会出现问题?
  • 就是这样,原来的文档里还有。
  • 你试过打印吗?因为在这一行 System.out.println(output.getTextContent());你不是在测试它。
  • 我找不到 XMLOutputter 类,只有一个 XMLOutPutSource 类,它没有 setFormat() 方法。
【解决方案2】:

Node.removeChild(Node) 不会使子节点无效,它只是将其与父节点分离。子节点可以再次使用,例如添加到另一个节点。

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    相关资源
    最近更新 更多