3

Java プログラムから XML ノードからノードを削除しようとすると、奇妙な問題が発生します。代替ノードを削除しています。新しいノードを挿入する前に、既存のノードを削除する必要があります。私のxmlファイルは次のとおりです。

<?xml version="1.0" encoding="windows-1252" ?>
<chart>
<categories>
 <category label="3 seconds"/>
 <category label="6 seconds"/>
 <category label="9 seconds"/>
 <category label="12 seconds"/>
</categories>

</chart>

私のJavaプログラムは次のとおりです。

      DocumentBuilderFactory  docFactory  = DocumentBuilderFactory.newInstance();
      DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

      Document doc = docBuilder.parse(filePath);


      Node categories = doc.getElementsByTagName("categories").item(0);

      NodeList categorieslist = categories.getChildNodes();

      // if exists delete old data the insert new data.


      for (int c = 0; c < categorieslist.getLength(); c++) {

        Node node = categorieslist.item(c);
        categories.removeChild(node);
      }
    for(int i=1;i<20;i++){

    Element category = doc.createElement("category");
    category.setAttribute("label",3*i+" seconds");
    categories.appendChild(category);
  }

このコードは、理由がわからない代替ノードを削除しています。結果の XML は次のように表示されます。

<categories>
 <category label="6 seconds"/>
 <category label="12 seconds"/>
 <category label="3 seconds"/>
 <category label="6 seconds"/>
 <category label="9 seconds"/>
      .....
      .....
 </categories>
4

1 に答える 1

6

子を削除するたびにリストが短くなり、リストは静的コレクションではないため、getLength()を呼び出すたびに実際のサイズが取得されます

Node categories = doc.getElementsByTagName("categories").item(0);
NodeList categorieslist = categories.getChildNodes();
while (categorieslist.getLength() > 0) {
    Node node = categorieslist.item(0);
    node.getParentNode().removeChild(node);
}
于 2012-07-10T14:41:57.827 に答える