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 に答える