本书作者开发的zXml库通过一个公共接口提供了跨浏览器兼容的XPath功能。负责提供XPath功能的对象是zXPath,该对象包含两个方法。
第一个方法是selectSingleNode()。该方法与IE方法同名,返回与模式匹配的第一个节点。与IE实现不同的是,该方法接受三个参数:上下文节点、XPath表达式字符串以及包含命名空间声明的字符串。命名空间字符串的格式如下所示:
"xmlns:na='http://site1.com' xmlns:pub='http://site2.com'
xmlns:ns='http://site3.com'"
如果文档没有命名空间,那么selectSingleNode()方法只需要前两个参数。
selectSingleNode()方法所返回的结果是所选中的XML节点,或者没有查到匹配项时将为null。如果浏览器不支持XPath,那么会抛出错误,声明浏览器没有安装XPath引擎。下面这个例子将基于文档元素来执行XPath表达式:
var oRoot = oXmlDom.documentElement;
var oNode = zXPath.selectSingleNode(oRoot, "book/author", null);
if (oNode) {
alert(oNode.xml);
}
该例子从文档根节点的上下文中查找<book/>元素中的第一个<author/>元素。如果找到,就在警告框中显示序列化后的XML数据。
zXPath的第二个方法是selectNodes(),该方法与IE的selectNodes()方法相当类似,而且都是返回节点集合。该方法的语法与上面的selectSingleNode()方法很接近,同样的参数,同样的命名空间规则,并且当浏览器没有安装XPath引擎时,也将抛出同样的错误提示。下面的例子演示了selectNodes()方法的使用:
var sNameSpace = "xmlns:na='http://site1.com' xmlns:pub='http://site2.com'";
var oRoot = oXmlDom.documentElement;
var sXPath = "na:book/pub:name";
var oNodes = zXPath.selectNodes(oRoot, sXPath, sNameSpace);
if (oNodes.length > 0) {
alert(oNodes.length);
}
这个例子与selectSingleNode()的例子相当类似,都是查找文档中包含命名空间的所有作者元素。如果结果集合个数大于0,那么显示结果的个数。
XPath是一个强大的工具,可以在XML文档中遍历并选择特定的节点,尽管设计者最初并没有考虑将其作为一个独立的工具。相反,XPath只是为XSLT(可扩展样式表语言转换)所创建。







