2012-05-05 9 views
0

JavaのDOMで解析されたXMLファイルからノードを削除しようとしています。XML構造内のノードを削除するJava DOM

private Node deleteChildNode (Node node, String nodeName) 
{ 
    Node tempNode = null; 
    NodeList nl = node.getChildNodes(); 
    for (int i = 0; i < nl.getLength(); i++) 
    { 
     tempNode = nl.item(i); 
     if (tempNode.getNodeName().equals(nodeName)) 
     {     
      tempNode= node.removeChild(tempNode);     
     }   
    } 
    return node; 
} 

を呼び出す:

nodeClone = deleteChildNode(nodeClone, "L123"); 

しかし、ノードが削除されていません。

NodeList nl = nodeClone.getChildNodes(); 
     for (int i = 0; i < nl.getLength(); i++) 
      System.out.println(nl.item(i).getNodeName()); 

「L123」ノードが表示されます。

ありがとうございます!

+0

なぜこれが役立つだろうか?ノードと名前があります。 Nodeは "node.removeChild"の後に "tempNode"に格納され、格納されます。しかし、それは "ノード"で削除されません。これはXMLファイルに依存できません(ノードが検出されたため)。そして、もう周りにコードはなくてはなりません。削除するノードを検索するだけです。 – Skolleus

+0

私はあなたにもっとコードを与えることはできません。私は金曜日にVersionControlSystemからずっと多くをチェックアウトしておらず、すべてのxmlで動作します。 – Skolleus

答えて

5

ノードに複数のノードがある場合は、ノードをスキップするため、コードは機能しません。ノードを削除しながらNodeListを使用するのはちょっと難しいです。基本的には、子ノードを削除するとNodeListが変更され、次のすべてのノードが1つのインデックスに戻されるようになります。 (インデックスを使用してリストを反復処理しながら、Listから要素を削除するのと同様です)。簡単な修正は、 " - i;"を追加することです。子ノードを削除した後。

私は渡されたノードの子をクリアするために、この小さな便利なメソッドを使用し
+0

ありがとうございます。それでおしまい。そして、この単純な修正はうまくいきます:D私は "投票する"ことを望みますが、私の評判は<15です。 – Skolleus

+0

@Skolleus - あなたが質問したので、あなたは投票しない、あなたは答えを "受け入れる"。 – jtahlborn

+0

@Skolleus - また、将来的には、一致するノードが複数あり、一部が削除されていて他は削除されていないことが明らかであれば、あなたの質問は早く返答されているはずです。 – jtahlborn

1

public static void clearChildNodes(Node node){ 
    while(node.hasChildNodes()){ 
     NodeList nList = node.getChildNodes(); 
     int index = node.getChildNodes().getLength() - 1; 

     Node n = nList.item(index); 
     clearChildNodes(n); 
     node.removeChild(n); 
    } 

} 
関連する問題