Java 使用JDom删除具有特定属性的元素时出错

Java 使用JDom删除具有特定属性的元素时出错,java,jdom,Java,Jdom,这是我的XML文件: <?xml version="1.0" encoding="UTF-8"?> <record> <data id="2-1"> <ns>45</ns> <hfdi /> <hfdv>0.26</hfdv> </data> <data id="2-3"> <ns>49</ns> &l

这是我的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<record>
  <data id="2-1">
    <ns>45</ns>
    <hfdi />
    <hfdv>0.26</hfdv>
  </data>
  <data id="2-3">
    <ns>49</ns>
    <hfdi />
    <hfdv>0.34</hfdv>
  </data>
</record>
然后我的XML变成这样:

<?xml version="1.0" encoding="UTF-8"?>
<record>
  <data id="2-1">
    <ns>45</ns>
    <hfdi />
    <hfdv>0.26</hfdv>
  </data>
</record>
  "2-3">
    <ns>49</ns>
    <hfdi />
    <hfdv>0.34</hfdv>
  </data>
</record>

45
0.26
"2-3">
49
0.34
元素“2-3”仍然没有头

我想删除的元素似乎没有被正确删除。我怎样才能修好它


任何帮助都将不胜感激。

Xing,我相信您必须打开一个文件进行写入,然后覆盖文件的开头,但不要先截断文件。你最终会得到你所拥有的

至于detatch()与removeContent(…),detatch会更快,但这并不是造成问题的原因

能否提供有关如何打开和写入文件的更多详细信息


编辑:太好了。您的Files.newOutputStream(..)方法调用需要设置选项和写入选项。

您使用的jdom版本是什么?请你澄清一下。嗨,@rolfl。我编辑了这篇文章,以显示与文件相关的子句。这似乎不是这个问题的原因。太棒了!它是如何工作的?尽管我已经阅读了TRUNCATE_的定义,但我仍然不太清楚它在这里做了什么。Java7NIO'2'扩展(文件、路径等)是非常低级的概念,它们完全按照他们所说的做。您打开了文件进行写入,但没有告诉它先删除旧内容。默认情况下,“旧”IO运算符(新FileOutputStream(…)将为您执行这两个操作。在您的情况下,它只是使用一个新的API进行文件操作,这对您来说是新的,并且不像您期望的那样具有逻辑性。另一方面,“C”程序员会想“这是合乎逻辑的!”。谢谢
<?xml version="1.0" encoding="UTF-8"?>
<record>
  <data id="2-1">
    <ns>45</ns>
    <hfdi />
    <hfdv>0.26</hfdv>
  </data>
</record>
  "2-3">
    <ns>49</ns>
    <hfdi />
    <hfdv>0.34</hfdv>
  </data>
</record>