XML DOM - Замена узлов

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

Свойство nodeValue заменяет текст в текстовом узле.

Замена узла элемента

Чтобы заменить один узел элемента на другой, используется метод replaceChild().

В следующем фрагменте кода заменяется первый элемент <book>:


xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.documentElement;

//создаем элемент book, элемент title и текстовый узел
newNode=xmlDoc.createElement("book");
newTitle=xmlDoc.createElement("title");
newText=xmlDoc.createTextNode("A Notebook");

//добавляем текстовый узел в узел title
newTitle.appendChild(newText);
//добавляем узел title в узел book
newNode.appendChild(newTitle);

y=xmlDoc.getElementsByTagName("book")[0]
//заменяем первый узел book новым узлом
x.replaceChild(newNode,y);

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

  1. Загружаем файл books.xml в переменную xmlDoc
  2. Создаем новый узел элемента <book>
  3. Создаем новый узел элемента <title>
  4. Создаем новый текстовый узел с текстом "A Notebook"
  5. Присоединяем новый текстовый узел к новому узлу элементу <title>
  6. Присоединяем новый узел элемента <title> к новому узлу элементу <book>
  7. Заменяем первый узел элемента <book> на новый узел элемента <book>

Замена данных в текстовом узле

Метод replaceData() может использоваться для замены данных в текстовом узле.

Метод replaceData() принимает три параметра:

  • offset – С какого символа начинать замену (смещение). Отсчитывается с нуля
  • length – Сколько символов заменить
  • string – Строка для вставки

Пример:


xmlDoc=loadXMLDoc("books.xml");

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

x.replaceData(0,8,"Easy");

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

  1. Загружаем файл books.xml в переменную xmlDoc
  2. Получаем текстовый узел первого узла элемента <title>
  3. Используем метод replaceData(), чтобы заменить восемь первых символов текстового узла на строку "Easy"

Вместо этого можно использовать свойство nodeValue

Заменить данные в текстовом узле проще с помощью свойства nodeValue.

В следующем фрагменте кода заменяется значение текстового узла в первом элементе <title> на строку "Easy Italian":


xmlDoc=loadXMLDoc("books.xml");

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

x.nodeValue="Easy Italian";

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

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

Подробнее об изменении значения узлом можно прочитать в главе "Изменение узлов".