Прямая и обратная обработка XML
Иногда возникает необходимость в обработке XML и в последующей конвертации в древо DOM. Или наоборот, необходимо перевести древо DOM в XML. В этой статье рассмотрим объекты платформы web для обработки XML.
XMLSerializer
-
Сериализует деревья DOM, преобразуя их в строки, содержащие XML.
DOMParser
-
Создаёт дерево DOM, анализируя строку, содержащую XML, возвращая
XMLDocument
илиDocument
в зависимости от входящих данных. XMLHttpRequest
-
Загружает контент из URL-адреса; Содержимое XML возвращается как объект XML
Document
с деревом DOM, построенным из самого XML. - XPath
-
Технология создания строк, содержащих адреса для определённых частей документа XML, и поиска узлов XML на основе этих адресов.
Создание XML-документа
Использование одного из следующих подходов для создания XML-документа (который является экземпляром Document
.
Parsing строк в дерево DOM
В этом примере фрагмент XML в строке преобразуется в дерево DOM с помощью DOMParser
:
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:
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
, но это не обязательно отдельный тип. В некоторых браузерах это так, а в других это просто псевдоним для интерфейса Document
.
Сериализация XML-документа
Имея Document
, вы можете сериализовать дерево DOM документа обратно в XML с помощью метода XMLSerializer.serializeToString ()
.
Используйте следующие подходы для сериализации содержимого XML-документа, созданного в предыдущем разделе.
Serializing DOM trees to strings
Сначала создайте дерево DOM, как описано в разделе Как создать дерево DOM. В качестве альтернативы используйте дерево DOM, полученное из XMLHttpRequest
.
Чтобы сериализовать документ дерева DOM в текст XML, вызовите XMLSerializer.serializeToString ()
:
var oSerializer = new XMLSerializer();
var sXML = oSerializer.serializeToString(doc);
Serializing HTML documents
Если у вас есть модель DOM в виде HTML-документа, вы можете сериализовать её с помощью serializeToString (), но есть более простой вариант: просто используйте свойство Element.innerHTML
(если вам нужны только потомки указанный узел) или свойство Element.outerHTML
, если вам нужен узел и все его потомки.
var docHTML = document.documentElement.innerHTML;
В результате docHTML представляет собой DOMString
, содержащий HTML-код содержимого документа; то есть содержимое элемента <body>
.
Вы можете получить HTML, соответствующий <body> и его потомкам, с помощью этого кода:
var docHTML = document.documentElement.outerHTML;