22.1 浏览器对XML DOM的支持
22.1.1 DOM Level 2 Core
document.implementation的createDocument()方法,创建空XML文档
22.1.2 DOMParser类型
要使用DOMParser,需要先创建它的一个实例,然后再调用parseFromString()方法。
这个方法接收两个参数:要解析的XML字符串和内容类型(始终应该是”text/html”)。
返回值是Document的实例。
22.1.3 XMLSerializer类型
XMLSerializer类型用于提供相反的功能:把DOM文档序列化为XML字符串。
要序列化DOM文档,必须创建XMLSerializer的新实例,然后把文档传给serializeToString()方法
注:如果给serializeToString()传入非DOM对象,就会导致抛出错误。
22.2 浏览器对XPath的支持
XPath是为了在DOM文档中定位特定节点而创建的,因此它对XML处理很重要。
22.2.1 DOM Level 3 XPath
DOM Level 3 XPath规范定义了接口,用于在DOM中求值XPath表达式。
22.2.2 单个节点结果
XPathResult.FIRST_ORDERED_NODE_TYPE结果类型返回匹配的第一个节点,可以通过结果的singleNodeValue属性获取。
22.2.3 简单类型结果
使用布尔值、数值和字符串XPathResult类型,可以根据XPath获取简单、非节点数据类型。
这些结果类型返回的值需要分别使用booleanValue、numberValue和stringValue属性获取。
对于布尔值类型,如果至少有一个节点匹配XPath表达式,booleanValue就是true;
否则,booleanValue为false。
22.2.4 默认类型结果
所有XPath表达式都会自动映射到特定类型的结果。
设置特定结果类型会限制表达式的输出。
但是,可以使用XPathResult.ANY_TYPE类型让求值自动返回默认类型结果。
通常,默认类型结果是布尔值、数值、字符串或无序节点迭代器。
要确定返回的结果类型,可以访问求值结果的resultType属性。
22.2.5 命名空间支持
对于使用命名空间的XML文档,必须告诉XPathEvaluator命名空间信息,才能进行正确求值。
第一种处理命名空间的方式:通过createNSResolver()方法创建XPathNSResolver对象。
这个方法只接收一个参数,即包含命名空间定义的文档节点。
第二种处理命名空间的方式是:定义一个接收命名空间前缀并返回相应URI的函数。
22.3 浏览器对XSLT的支持
可扩展样式表语言转换(XSLT, Extensible Stylesheet LanguageTransformations)是与XML相伴的一种技术,可以利用XPath将一种文档表示转换为另一种文档表示。
与XML和XPath不同,XSLT没有与之相关的正式API,正式的DOM中也没有涵盖它。
因此浏览器都以自己的方式实现XSLT。率先在JavaScript中支持XSLT的是IE。
22.3.1 XSLTProcessor类型
Mozilla通过增加了一个新类型XSLTProcessor,在JavaScript中实现了对XSLT的支持。通过使用XSLTProcessor类型,开发者可以使用XSLT转换XML文档,其方式类似于在IE中使用XSL处理器。
22.3.2 使用参数
XSLTProcessor还允许使用setParameter()方法设置XSLT参数。
该方法接收三个参数:命名空间URI、参数本地名称和要设置的值。
通常,命名空间URI是null,本地名称就是参数名称。
setParameter()方法必须在调用transformToDocument()或transformToFragment()之前调用。
22.3.3 重置处理器
每个XSLTProcessor实例都可以重用于多个转换,只是要使用不同的XSLT样式表。
处理器的reset()方法可以删除所有参数和样式表。
然后,可以使用importStylesheet()方法加载不同的XSLT样表。
