--- title: Parsing and serializing XML slug: Web/Guide/Parsing_and_serializing_XML tags: - DOM - Document - XML - XMLHttpRequest - 指南 translation_of: Web/Guide/Parsing_and_serializing_XML ---
有时, 你可能需要解析 {{Glossary("XML")}} 内容,并把它转换为 {{Glossary("DOM")}} 树,或者,反过来将现有的DOM树序列化成XML。在本文中,我们将查看Web平台提供的对象,以便轻松地序列化和解析XML的常见任务。
使用以下方法来创建一个 XML 文档(该文档是 {{domxref("Document")}} 的一个例子)。
下面这个例子使用 {{domxref("DOMParser")}} 把字符串中的 XML 片段转换为 DOM 树:
下列示例代码读取一个可寻址的 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();
在 xhr
对象 {{domxref("XMLHttpRequest.responseXML", "responseXML")}} 域中返回的值 是一个通过解析XML构造的 {{domxref("Document")}}。
如果这个文档是 {{Glossary("HTML")}},上面实例代码将会返回一个 {{domxref("Document")}}。如果它是 XML,那获取的结果对象实际上是一个 {{domxref("XMLDocument")}}。这两种类型实质上是一样的; 不同点大部分是历史遗留的,尽管区分它们也会有一些实际好处。
注意:事实上,{{domxref("HTMLDocument")}} 也是一个接口,但是它不必是一个独立的类型。在一些浏览器上是,但在另外一些浏览器上它仅仅是 Document
接口的别名。
被给一个 {{domxref("Document")}},你可以使用 {{domxref("XMLSerializer.serializeToString()")}} 方法把文档的 DOM 树序列化为XML。
使用下面的方法来序列化在先前章节中创建的 XML 文档内容。
首先,使用如何创建一个DOM树中的方法构建一个 DOM 树。也可以使用从 {{ domxref("XMLHttpRequest") }} 中获得的 DOM 树。
为了序列化 DOM 树的 doc
为 XML 文档,调用 {{domxref("XMLSerializer.serializeToString()")}}:
var oSerializer = new XMLSerializer(); var sXML = oSerializer.serializeToString(doc);
如果你手上的 DOM 是一个 HTML 文档,你可以使用 serializeToString()
,但是也有一个更简单的选择: 直接用 {{domxref("Element.innerHTML")}} 属性(如果你仅仅想得到指定节点的后代的话)或者是如果你想得到节点本身及它所有的后代的话,你可以使用 {{domxref("Element.outerHTML")}} 属性。
var docHTML = document.documentElement.innerHTML;
因此,docHTML
is 一个包含 HTML内容的文档的 {{domxref("DOMString")}}; 也就是说,{{HTMLElement("body")}} 元素的内容。
你可以使用以下代码得到 <body>
和它的后代对应的HTML:
var docHTML = document.documentElement.outerHTML;