首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

4.2.4  Firefox中的XPath

FirefoxXPath实现遵循DOM标准,不过与IE中的实现差别较大。Firefox的实现版本允许XPath表达式以相同方式在HTMLXML文档中运行。这里最主要的对象有两个:XPathEvaluatorXPathResult

XPathEveluator类使用evaluate()方法对给定的XPath表达式进行求值,evaluate()方法包含五个参数:需要计算的XPath表达式字符串,表达式执行的上下文节点,命名空间解析器(处理表达式中命名空间的函数),结果类型(允许10种不同的结果类型)以及包含结果的XPathResult对象(如果参数为null,那么返回新的XPathResult对象)。

在继续深入讨论之前,理解evalute()方法返回的不同结果类型是很重要的。它们分别是:

q  XPathResult.ANY_TYPE,返回不确定类型。该方法返回的类型由表达式计算的结果决定。

q  XPathResult.ANY_UNORDERED_NODE_TYPE,返回通过singleNodeValue属性访问的某个节点的节点集合,如果没有匹配的节点,那么返回null。返回的节点集合不一定按出现的顺序排列。

q  XPathResult.BOOLEAN_TYPE,返回布尔值。

q  XPathResult.FIRST_ORDERED_NODE_TYPE,返回某个节点的节点集合。该节点使用XPathResult类的singleNodeValue属性访问。返回的节点是文档中第一个出现的节点。

q  XPathResult.NUMBER_TYPE,返回数字值。

q  XPathResult.ORDERED_NODE_ITERATOR_TYPE,返回文档顺序的节点集合(使用iterateNext()方法遍历)。因此,可以容易地访问集合中每个独立的节点。

q  XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,返回文档顺序的节点集合(结果集合的快照)。任何对文档中节点的修改都不影响结果。

q  XPathResult.STRING_TYPE,返回字符串值。

q  XPathResult.UNORDERED_NODE_ITERATOR_TYPE,返回可以遍历的节点集合,然而,节点的顺序与其在文档中出现的顺序不一定一致。

q  XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,返回无序快照节点集合。任何对文档中节点的修改都不影响结果。

最常用的结果类型是XPathResult.ORDERED_NODE_ITERATOR_TYPE

var oEvaluator = new XPathEvaluator();

var sXPath = "book/author";

var oResult = oEvaluator.evaluate(sXPath,oXmlDom.documentElement,null,

       XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

 

var aNodes = new Array;

 

if (oResult != null) {

    var oElement;

    while (oElement = oResult.iterateNext()) {

       aNodes.push(oElement);

    }

}

这段代码创建了一个XPathEvaluator对象,该对象用于计算文档根节点上下文中的XPath表达式book/author。因为结果类型是ORDERED_NODE_ITERATOR_TYPE,所以将返回一个可以使用iterateNext()方法进行遍历的节点集合。

iterateNext()方法类似于DOM节点的nextSibling属性,在结果集合中选择下一个节点,当到达结果集合结尾时返回null。该函数可以在while循环中使用,只要oElement不为null,那么就可以通过push()方法将其添加到aNodes数组中。填充数组的方法与IE中的方法类似,因此,可以容易地在for循环中使用或访问每个数组元素。