ajax-Xpath

xml方式在查询某一结点时不太方便,而Xpath提供了在XML文档中查找任意节点的解决方案

XPath表达式由两部分所组成:上下文节点和选择模式。

book[@isbn=’0471777781′] 在book结点所有子结点中查找isbn属性为’0471777781’的作者元素

1,IE中的XPath

?? ??? ?微软通过两种方法来实现基于XPath表达式的节点选择。

?? ??? ??? ?????? (1)selectSingleNode()? 它将返回匹配表达式的第一个节点
?? ??? ??? ??? ??? ??? ?? var oFirstAuthor = oXmlDom.documentElement.selectSingleNode(“book/author”);
???????????????? 返回是documentElement的上下文中<book/>元素子节点的第一个<author/>元素

?????????????????? (2)selectNode() 返回一个NodeList,它是所有与该XPath表达式匹配的节点集,要注意的一点是如果文档中没有相匹配的元素,那么还是会返回一个NodeList,只是长度为0。因此在使用NodeList前,最好先判断其长度是否大于0:
?
??????????? var cAuthors = oXmlDom.documentElement.selectNodes(“book/author”);

?? ??? ??? ??? ??? ?if (cAuthors.length > 0) {

????? ??? ??? ??? ??? ? //进行操作

?? ??? ??? ??? ??? ?}

2, Firefox中的XPath

????? Firefox的实现版本允许XPath表达式以相同方式在HTML和XML文档中运行。这里最主要的对象有两个:XPathEvaluator和XPathResult。

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

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);

??? }

}

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: