无法删除xml文件的节点“参数”

时间:2012-03-22 12:39:47

标签: java xml removechild

- <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>

这是我的XML文件。现在,我想删除名为parameter的节点“TPCSEC”。

对于此删除,我使用下面的代码。

               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...");

                    }
                }

我的代码是否正确。执行时,它不会显示任何错误或警告。但它不会删除请求的节点。 感谢..

3 个答案:

答案 0 :(得分: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)

我可以在您的代码中看到一个问题。那就是在迭代循环时删除项目。

所以这是一个例子。

你有10个东西的列表,在索引5,你删除,你增加你的位置,现在你在索引6,但在你的列表中,你正在查看索引7处的项目。

我倾向于反转循环,设置temp = nList.getLength(),然后执行temp--,以确保在到达之前不删除项目。

答案 2 :(得分:-1)

您正在执行rootElement.removeChild(eElement),但是eElement不一定是root的子节点,它可能是树中另一个节点的子节点,因为您正在获取 all “property”节点。我想你想做什么

eElement.getParentNode().removeChild(element);