Невозможно удалить на узел «параметр» XML-файла - PullRequest
1 голос
/ 22 марта 2012
- <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 ]

1 голос
/ 04 апреля 2012

Вы написали это в исходный файл XML.Я имею в виду

TransformerFactory transformerFactory = TransformerFactory.newInstance();  
Transformer transformer = transformerFactory.newTransformer();   
DOMSource source = new DOMSource(doc);   
StreamResult result = new StreamResult(selectedFile); 
transformer.transform(source, result);   
0 голосов
/ 22 марта 2012

Вы делаете rootElement.removeChild (eElement), но eElement не обязательно является дочерним по отношению к корню, он может быть дочерним по отношению к другому узлу в дереве, поскольку вы получаете все узлы "свойства",Я думаю, что вы хотите сделать

eElement.getParentNode().removeChild(element);
0 голосов
/ 22 марта 2012

Я вижу одну проблему в вашем коде. Это удаляет элементы, когда вы повторяете цикл.

Итак, вот пример.

У вас есть список из 10 вещей, с индексом 5 вы удаляете, вы увеличиваете свою позицию, теперь вы находитесь на индексе 6, но в своем списке вы смотрите на элемент с индексом 7.

Я склонен перевернуть цикл, установить temp = nList.getLength () и выполнить temp--, чтобы убедиться, что вы не удаляете элементы до того, как доберетесь до них.

...