XML DOM - Удаление узлов

Метод removeChild() удаляет заданный узел.

Метод removeAttribute() удаляет заданный атрибут.

Удаление узла элемента

Метод removeChild() удаляет заданный узел.

Когда узел удаляется, все его дочерние узлы также удаляются.

Следующий код удалит первый элемент <book> из загруженного XML документа:


y = xmlDoc.getElementsByTagName("book")[0];

xmlDoc.documentElement.removeChild(y);

Объяснение примера:

  1. Предположим, что файл books.xml был загружен в переменную xmlDoc
  2. Сохраняем в переменной "y" узел элемента, который нужно удалить
  3. Удаляем узел элемента с помощью метода removeChild() из родительского узла

Удалить себя - Удаление текущего узла

Метод removeChild() - единственный способ удалить заданный узел.

Когда вы перешли к узлу, который необходимо удалить, этот узел можно удалить с помощью свойства parentNode и метода removeChild():


x = xmlDoc.getElementsByTagName("book")[0];

x.parentNode.removeChild(x);

Объяснение примера:

  1. Предположим, что файл books.xml был загружен в переменную xmlDoc
  2. Сохраняем в переменной "x" узел элемента, который нужно удалить
  3. Удаляем узел элемента с помощью свойства parentNode и метода removeChild()

Удаление текстового узла

Метод removeChild() также можно использовать для удаления текстового узла:


x = xmlDoc.getElementsByTagName("title")[0];
y = x.childNodes[0];
x.removeChild(y);

Объяснение примера:

  1. Предположим, что файл books.xml был загружен в переменную xmlDoc
  2. Сохраняем в переменной "x" первый элемент title
  3. Сохраняем в переменной "y" текстовый узел, который нужно удалить
  4. Удаляем узел элемента с помощью метода removeChild() из родительского узла

Только для удаления текста из узла метод removeChild() используется довольно редко. Вместо этого можно использовать свойство nodeValue.

Очистка текстового узла

Свойство nodeValue можно использовать для изменения значения текстового узла:


xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue = "";

Объяснение примера:

  1. Предположим, что файл books.xml был загружен в переменную xmlDoc
  2. Получаем первый дочерний узел первого элемента title
  3. Используем свойство nodeValue, чтобы очистить текстовое значение текстового узла

Удаление узла атрибута по имени

Метод removeAttribute() удаляет узел атрибута по его имени.

Следующий код удаляет атрибут "category" в первом элементе <book>:


x = xmlDoc.getElementsByTagName("book");
x[0].removeAttribute("category");

Объяснение примера:

  1. Предположим, что файл books.xml был загружен в переменную xmlDoc
  2. При помощи метода getElementsByTagName() получаем список узлов элементов book
  3. Удаляем атрибут "category" у первого узла элемента book книги.

Удаление узла атрибута через объект

Метод removeAttributeNode() удаляет узел атрибута, используя объект узла в качестве параметра.

Следующий код удаляет все атрибуты всех элементов <book>:


x = xmlDoc.getElementsByTagName("book");

for (i = 0; i < x.length; i++) {
    while (x[i].attributes.length > 0) {
        attnode = x[i].attributes[0];
        old_att = x[i].removeAttributeNode(attnode);
    }
}

Объяснение примера:

  1. Предположим, что файл books.xml был загружен в переменную xmlDoc
  2. При помощи метода getElementsByTagName() получаем все узлы элементов book
  3. Для каждого элемента book проверяем, есть ли у него атрибуты
  4. Пока атрибуты у элемента book есть, удаляем их