Helpers - компьютеры, интернет, программирование

Невозможно удалить параметр узла XML-файла

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

                    }
                }

Является ли мой код правильным. Во время выполнения он не показывает никаких ошибок или предупреждений. Но он не удаляет запрошенный узел. Спасибо..

22.03.2012

  • что выдает программа при запуске? 22.03.2012
  • он выполняет все операторы. до "удалено..." 22.03.2012
  • @MK Это мой вывод Родитель: параметры устройства имя_узла: перемещение параметра .... удалено... 22.03.2012
  • см. stackoverflow.com/questions/9867958/ 26.03.2012

Ответы:


1

Вы записали его в исходный файл xml. я имею в виду

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

2

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

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

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

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

22.03.2012
  • Нет, нодлист не будет меняться по мере удаления вещей. 22.03.2012
  • необходимо удалить все дочерние узлы узла перед его удалением...?? 22.03.2012
  • @Sachin нет, вы можете удалить узлы с детьми. 22.03.2012
  • @Sachin, нет. мой пример означает, что вы удаляете в обратном порядке. Если вы удаляете что-то, что вы уже посещали в списке, не имеет значения, удаляете ли вы это из списка, потому что вам не нужно снова посещать этот индекс . 22.03.2012

  • 3

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

    eElement.getParentNode().removeChild(element);
    
    22.03.2012
  • Да, nList — это список, содержащий указатели на объекты. Поскольку он удаляет элемент, он, по сути, удаляет элемент из списка. 22.03.2012
  • Вы комментируете неправильный ответ. NodeList будет списком ссылок на узлы, найденные в дереве. При удалении этих узлов из дерева список найденных узлов не изменится. 22.03.2012
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..