18.1.浏览器对XML DOM的支持
DOM2级核心
常见的情况是将某个XML文档解析为DOM结构,或者反之。
DOMParser类型
在解析XML之前,首先必须创建一个DOMParser的实例,然后再调用parseFromString()方法,这个方法接收两个参数:要解析的XML字符和内容类型。
XMLSreializer类型
DOMSerializer类型可以将DOM文档序列化为XML字符串。要序列化DOM文档,首先必须创建XMLSerializer的实例,然后将文档传入其serializeToString()方法。
IE8及之前版本中的XML
IE是第一个原生支持XML的浏览器,而这一支持是通过ActiveX对象实现的。要创建一个XML文档,也要使用ActiveXObject构造函数被为其传入一个表示XML文档版本的字符串。有6种不同的XML文档的实例,微软只推荐使用MSXML2.DOMDocument.6.0或MSXML2.DOMDocument。3.0,前者是最新最可靠的版本,而后者则是大多数Windows操作系统都支持的版本。
要解析XML字符串,首先必须创建一个DOM文档,然后调用loadXML()方法。要创建的XML文档完全是一个空文档,因而不能对其执行任何操作。为loadXML()方法传入的XML字符串经解析之后会被填充到DOM文档中。如果解析过程中出错,可以在parseError属性中找到错误消息。
跨浏览器处理XML
18.2浏览器对XPath的支持
XPath是设计用来在DOM文档中查找节点的一种手段。
DOM3级XPath
最重要的两个类型是XPathEvaluator和XPathResult。XPAthEvaluator用于在特定的上下文中对XPath表达式求值,有3个方法CreateExpression(expression,nsresolver):将XPath表达式及相应的命名空间信息转化成一个XpathExpression;createNSRsolver(node):根据node的命名空间信息创建一个新的XPathNSResolver对象;evaluate(expression,context,nsresolver,type,result):在给定的上下文中,基于特定的命名空间信息来对XPath表达式求值,第4个参数的取值:XPathResult.ANY_TYPE,XPathResult.NUMBER_TYPE,XPathResult.STRING_TYPE,XPathResult.BOOLEAN_TYPE,
XPathResult.UNORDERED_NODE_ITERATOR_TYPE,XPathResult.ORDERED_NODE_ITERATOR_TYPE,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,XPathResult.ANY_UNORDERED_NODE_TYPE,XPathResult.FTRET_ORDERED_NODE_TYPE.如果节点是一个节点迭代器,必须使用iterateNext()方法从节点中取得匹配的节点。如果指定的是快照结果类型,必须使用snapshotItem()方法和snapshotLength属性。
单节点结果(XPathResult.FTRET_ORDERED_NODE_TYPE),可以通过结果的singleNodeValue属性来访问该节点。
简单类型节点(XPathResult.NUMBER_TYPE,XPathResult.STRING_TYPE,XPathResult.BOOLEAN_TYPE):分别通过booleanValue、numberValue和stringValue属性返回一个值。
默认类型结果(XPathResult.ANY_TYPE):结果类型可能是布尔值、数值、字符串或一个次序不一致的节点迭代器,结果类型用resultType属性检测。
处理命名空间的第一种方法是通过createNSResolver()来创建XPathNSResolver对象。第二种方法是定义一个函数,让它接收一个命名空间前缀,返回关联的URI。
IE中的XPath
为了在IE9及之前的版本中使用XPath,必须使用基于ActiveX的实现,这个接口在每个节点上额外定义了两个方法:selectSingleNode()接收一个XPath模式作为参数,返回与模式匹配的第一个节点;selectNodes()也接收一个XPath模式作为参数,返回与模式匹配的所有节点的NodeList。
命名空间的处理:创建一个字符串,将这个字符传入到XML DOM文档对象的特殊方法setProperty()中。
跨浏览器使用XPath
18.3浏览器对XSLT的支持
XSLT是与XML相关的一种技术,利用XPath将文档从一种表现形式转化为另一种表现形式。
IE中的XSLT
使用XSLT样式表转换XML文档最简单方式,就是将它们分别加到一个DOM文档中,然后再使用transformNode()方法。
复杂的XSLT转换是把XSLT样式表加载到一个线程安全的XML文档中(这可以通过ActiveX对象MSXXML2.FreeThreadedDocument来做到)。在创建和加载了自由线程的DOM文档之后,必须将它指定给一个XSL模板。
XSLTProcessor类型