0

这是我的 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>

我尝试使用 JDOM 删除具有特定属性的元素。

Document doc =null;
try{
    InputStream is = Files.newInputStream(Paths.get("config.xml"),StandardOpenOption.READ)
    doc = (Document)((new SAXBuilder()).build(is));
}catch(Exception ex){//do something}

for(Element elem : doc.getRootElement().getChildren("data")){
    if(elem.getAttribute("id").getValue().equals("2-3")){
        elem.detach();
    }
}

XMLOutputter xo = new XMLOutputter();
xo.setFormat(Format.getPrettyFormat());
try{
    OutputStream os = Files.newOutputStream(Paths.get("config.xml"), StandardOpenOption.WRITE)
    xo.output(doc, os);
}catch(Exception ex){//do something}

然后我的 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>

元素“2-3”仍然没有头!!!!

看来我要删除的元素确实已正确删除。我该如何解决?

任何帮助将不胜感激。

4

1 回答 1

0

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

至于 detatch() 与 removeContent(...),detatch 会更快,但这不是导致您的问题的原因。

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

编辑:很好。您的 Files.newOutputStream(....) 方法调用需要设置TRUNCATE_EXISTING选项以及 WRITE OPTION。

于 2013-05-03T23:08:20.893 回答