当前位置: 代码迷 >> 综合 >> javascript Xpath学习笔记-----document.evaluat();
  详细解决方案

javascript Xpath学习笔记-----document.evaluat();

热度:95   发布时间:2024-01-21 14:44:01.0

XML实例文档

我们将在下面的例子中使用这个 XML 文档:

"books.xml" :

<?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book category="COOKING"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price>
</book><book category="CHILDREN"><title lang="en">Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book><book category="WEB"><title lang="en">XQuery Kick Start</title><author>James McGovern</author><author>Per Bothner</author><author>Kurt Cagle</author><author>James Linn</author><author>Vaidyanathan Nagarajan</author><year>2003</year><price>49.99</price>
</book><book category="WEB"><title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price>
</book></bookstore>

IE 和其他浏览器处理 XPath 的方式不同(又是该死的IE)。

IE 使用 selectNodes() 方法从 XML 文档中的选取节点:

xmlDoc.selectNodes(xpath);

Firefox、Chrome、Opera 以及 Safari 使用 evaluate() 方法从 XML 文档中选取节点:

xmlDoc.evaluate(xpathText,contextNode,namespaceURLMapper,resultType,result)


xpathText 表示要计算的 XPath 表达式的字符串。
contextNode 文档中,对应要计算的表达式的节点。
namespaceURLMapper

把一个命名空间前缀映射为一个全称命名空间 URL 的函数。

如果不需要这样的映射,就为 null。

resultType

指定了期待作为结果的对象的类型,使用 XPath 转换来强制结果类型。

类型的可能的值是 XPathResult 对象所定义的常量。

result

一个复用的 XPathResult 对象;

 

 

如果你要创建一个新的 XPathResult 对象,则为 null。

 

实例:

 

下面的例子选取所有 title 节点:

/bookstore/book/title

选取第一个 book 的 title

下面的例子选取 bookstore 元素下面的第一个 book 节点的 title:

/bookstore/book[1]/title这里有一个问题。上面的例子在 IE 和其他浏览器中输出不同的结果。

IE5 以及更高版本将 [0] 视为第一个节点,而根据 W3C 的标准,应该是 [1]。

为了解决 IE5+ 中 [0] 和 [1] 的问题,可以为 XPath 设置语言选择(SelectionLanguage)。

下面的例子选取 bookstore 元素下面的第一个 book 节点的 title:

xml.setProperty("SelectionLanguage","XPath");
xml.selectNodes("/bookstore/book[1]/title");

选取所有价格

下面的例子选取 price 节点中的所有文本:

/bookstore/book/price/text()

选取价格高于 35 的 price 节点

下面的例子选取价格高于 35 的所有 price 节点:

/bookstore/book[price>35]/price

选取价格高于 35 的 title 节点

下面的例子选取价格高于 35 的所有 title 节点:

/bookstore/book[price>35]/title

选取所有的 book 节点

下面的这个例子选取了 bookstore 元素下所有的 book 节点:

xmlDoc.selectNodes("/bookstore/book")下面的例子仅选取 bookstore 元素下第一个 book 节点:
xmlDoc.selectNodes("/bookstore/book[0]")

假如您正在使用 IE 5或更高的版本,可以亲自试一试。

注释:IE 5 和 6 会把 [0] 作为第一个节点来执行,但是根据 W3C 的标准,应该使用 [1] !!

注释:这个问题在 IE 6 SP2 中被纠正了!

 

  相关解决方案