Прямая и обратная обработка XML

Иногда возникает необходимость в обработке XML и в последующей конвертации в древо DOM. Или наоборот, необходимо перевести древо DOM в XML. В этой статье рассмотрим объекты платформы web для обработки XML.

XMLSerializer

Сериализует деревья DOM, преобразуя их в строки, содержащие XML.

DOMParser

Создаёт дерево DOM, анализируя строку, содержащую XML, возвращая XMLDocument или Document в зависимости от входящих данных.

XMLHttpRequest

Загружает контент из URL-адреса; Содержимое XML возвращается как объект XML Document с деревом DOM, построенным из самого XML.

XPath (en-US)

Технология создания строк, содержащих адреса для определённых частей документа XML, и поиска узлов XML на основе этих адресов.

Создание XML-документа

Использование одного из следующих подходов для создания XML-документа (который является экземпляром Document.

Parsing строк в дерево DOM

В этом примере фрагмент XML в строке преобразуется в дерево DOM с помощью DOMParser:

js
var sMyString = '<a id="a"><b id="b">hey!</b></a>';
var oParser = new DOMParser();
var oDOM = oParser.parseFromString(sMyString, "application/xml");
// print the name of the root element or error message
console.log(
  oDOM.documentElement.nodeName == "parsererror"
    ? "error while parsing"
    : oDOM.documentElement.nodeName,
);

Parsing URL-addressable ресурсов в дерево DOM

Использование XMLHttpRequest

Вот пример кода, который считывает и анализирует XML-файл с URL-адресом в дереве DOM:

js
var xhr = new XMLHttpRequest();
xhr.onload = function () {
  dump(xhr.responseXML.documentElement.nodeName);
};
xhr.onerror = function () {
  dump("Error while getting XML.");
};
xhr.open("GET", "example.xml");
xhr.responseType = "document";
xhr.send();

Значение, возвращаемое в поле responseXML объекта xhr, является Document, созданным путём синтаксического анализа XML.

Если документ представляет собой HTML, приведённый выше код вернёт Document. Если документ XML, результирующий объект на самом деле является XMLDocument. Эти два типа по существу одинаковы; разница в основном историческая, хотя дифференциация имеет также некоторые практические преимущества.

Примечание: Примечание: на самом деле существует интерфейс HTMLDocument, но это не обязательно независимый тип. В некоторых браузерах это так, а в других это просто псевдоним для интерфейса документа.

Сериализация XML-документа

Имея Document, вы можете сериализовать дерево DOM документа обратно в XML с помощью метода XMLSerializer.serializeToString ().

Используйте следующие подходы для сериализации содержимого XML-документа, созданного в предыдущем разделе.

Serializing DOM trees to strings

Сначала создайте дерево DOM, как описано в разделе Как создать дерево DOM. В качестве альтернативы используйте дерево DOM, полученное из XMLHttpRequest.

Чтобы сериализовать документ дерева DOM в текст XML, вызовите XMLSerializer.serializeToString ():

js
var oSerializer = new XMLSerializer();
var sXML = oSerializer.serializeToString(doc);

Serializing HTML documents

Если у вас есть модель DOM в виде HTML-документа, вы можете сериализовать её с помощью serializeToString (), но есть более простой вариант: просто используйте свойство Element.innerHTML (если вам нужны только потомки указанный узел) или свойство Element.outerHTML, если вам нужен узел и все его потомки.

js
var docHTML = document.documentElement.innerHTML;

В результате docHTML представляет собой DOMString, содержащий HTML-код содержимого документа; то есть содержимое элемента <body>.

Вы можете получить HTML, соответствующий <body> и его потомкам, с помощью этого кода:

js
var docHTML = document.documentElement.outerHTML;

See also