而自从 DOM 出现后,所有浏览器都内置了对 XML 的原生支持(XML DOM),同时也提供了一系列相关的技术支持。
18.1 浏览器对 XML DOM 的支持
DOM2 级是第一个提到动态创建 XML DOM 概念的规范。DOM3级进一步增强了 XML DOM,新增了解析和序列化等特性。
18.1.1 DOM2 级核心
DOM2级在document.implementation 中引入了createDocument()方法。
语法:
var xmldom = document.implementation.createDocument(namespaceUri, root, doctype);
要想创建一个新的、文档元素为<root>的 XML 文档
var xmldom = document.implementation.createDocument("", "root", null);
alert(xmldom.documentElement.tagName); //"root"
var child = xmldom.createElement("child");
xmldom.documentElement.appendChild(child);
18.1.2 DOMParser类型
为了将 XML 解析为 DOM 文档,Firefox 引入了 DOMParser 类型;在解析 XML 之前,首先必须创建一个 DOMParser 的实例,然后再调用parseFromString()方法。
var parser = new DOMParser();
var xmldom = parser.parseFromString("<root><child/></root>", "text/xml");
alert(xmldom.documentElement.tagName); //"root"
alert(xmldom.documentElement.firstChild.tagName); //"child"
var anotherChild = xmldom.createElement("child");
xmldom.documentElement.appendChild(anotherChild);
var children = xmldom.getElementsByTagName("child");
alert(children.length); //2
DOMParser 只能解析格式良好的 XML,因而不能把 HTML 解析为 HTML 文档。
18.1.3 XMLSerializer类型
在引入 DOMParser 的同时,Firefox 还引入了 XMLSerializer 类型,提供了相反的功能:将 DOM 文档序列化为 XML 字符串。
要序列化 DOM 文档,首先必须创建 XMLSerializer 的实例,然后将文档传入其serializeToString ()方法,如下面的例子所示。
var serializer = new XMLSerializer();
var xml = serializer.serializeToString(xmldom);
alert(xml);
18.1.4 IE8 及之前版本中的XML
事实上,IE 是第一个原生支持 XML 的浏览器,而这一支持是通过 ActiveX 对象实现的。为了便于 桌面应用程序开发人员处理 XML,微软创建了 MSXML 库;但微软并没有针对 JavaScript 创建不同的对象,而只是让 Web 开发人员能够通过浏览器访问相同的对象。
18.3 浏览器对 XSLT 的支持
XSLT 是与 XML 相关的一种技术,它利用 XPath 将文档从一种表现形式转换成另一种表现形式。与 XML 和 XPath 不同,XSLT 没有正式的 API,在正式的 DOM 规范中也没有它的位置。结果,只能依靠浏览器开发商以自己的方式来实现它。