2012-03-22 10 views
1
- <deviceparameters> 
- <parameter componenttype="Table"> 
     <name>TPCSEC</name> 
     <oid>342234</oid> 
     <writable>true</writable> 
     <description>Tata Power SED</description> 
    - <columns> 
      <colname access="ReadOnly" type="Integer">col1</colname> 
      <colname access="ReadOnly" type="Integer">col2</colname> 
     </columns> 
    - <rows> 
      <value>123</value> 
      <value>231</value> 
     </rows> 
    </parameter> 
- <parameter componenttype="ListBox"> 
     <name>Enum</name> 
     <oid>7892</oid> 
     <writable>true</writable> 
     <description>This is Enumeration</description> 
    - <paramvalues type="String"> 
     <value default="Yes">1231</value> 
     <value default="No">3423</value> 
     <value default="Yes">231</value> 
     </paramvalues> 
    </parameter> 
    </deviceparameters> 

このmy XMLファイル。今私はTPCSECという名前のノード 'parameter'を削除したいと思います。xmlファイルのノード 'パラメータ'には削除できません

この削除のために、私は以下のコードを使用しています。

   DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
       doc = dBuilder.parse(selectedFile); 
       doc.getDocumentElement().normalize(); 

       rootElement = doc.getDocumentElement(); 

       NodeList nList = doc.getElementsByTagName("parameter"); 

       System.out.println(""+nList.getLength()); 
       for (int temp = 0; temp < nList.getLength(); temp++) 
       { 
        Node nNode = nList.item(temp);  
        Element eElement = (Element) nNode; 
        String upname1 = getTagValue("name", eElement);         

        if(upname1.equals(nodeName)) 
        { 
         System.out.println("Parent: "+nNode.getParentNode().getNodeName()); 
         System.out.println("nodename: "+nNode.getNodeName()); 
         System.out.println("rmoving ...."); 

         rootElement.removeChild(eElement); 
         System.out.println("removed..."); 

        } 
       } 

私のコードは正しいですか。実行中は、エラーや警告は表示されません。しかし、要求されたノードは削除されません。 ありがとう。

+1

あなたがそれを実行すると、何が出力されますか? –

+0

すべてのステートメントを実行します。 「削除されるまで」 –

+0

@MKこれは私の出力です親:deviceparameters nodename:パラメータrmoving ....削除... –

答えて

1

オリジナルのXMLファイルに書きましたか?私は意味する

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
DOMSource source = new DOMSource(doc); 
StreamResult result = new StreamResult(selectedFile); 
transformer.transform(source, result); 
-1

コード内に1つの問題があります。これは、ループを反復するときにアイテムを削除しています。

だからここが一例です。

あなたは今、あなたはインデックス6であるが、あなたのリストの中に、あなたは私がインデックス7

でアイテムを見ている、あなたは自分の位置をインクリメントし、インデックス5で、10のもののリストを持っている、あなたは削除ループを逆にする傾向があり、temp = nList.getLength()を設定し、temp-を実行すると、項目に到達する前に項目を削除しないことが保証されます。

+0

いいえ、ノードリストは物事を取り除くにつれて変化しません。 –

+0

削除する前にノードのすべての子ノードを削除する必要がありますか? –

+0

@Sachin no、子ノードを削除できます。 –

-1

eElementはrootの子である必要はありません。すべての「プロパティ」ノードを取得しているため、ツリー内の別のノードの子である可能性があります。あなたがしたいと思う

eElement.getParentNode().removeChild(element); 
+0

コメント無しdownvotesをお願いします –

+0

はい、彼は、nListはオブジェクトへのポインタを含むリストです。彼は要素を削除しているので、リストから項目を削除しています。 – Churk

+0

うまくいけば、彼は終わりに限界を超えたインデックスを取得します。 – Churk

関連する問題