Xpath in JavaScript (第二部分【命名空间】)

简介:

        在上一篇文章中,我们介绍了在Firefox, Safari, Chrome, and Opera支持的DOM Level 3 XPath,但是我们没有谈关于命名空间在Xpath中的解决方案。如果你只是使用xpath在html文档中简单的查询,evaluate()中的命名空间解析器参数一般为null,如果你倾向于使用xpath在包含命名空间的xml文档中查询,那么你应该学会怎样创建和使用命名空间解析器。

 

         除了默认的命名空间以外,每个命名空间URI都映射到一个指定的前缀。每一个命名空间解析器是为xpath引擎在命名空间前缀和命名空间uri之间进行映射。有两种生成命名空间解析器的方法,第一种如下:创建一个接受命名空间前缀作为参数的方法,然后返回对应的url ,如下: function resolver(prefix){ switch(prefix){ case "wrox": return "http://www.wrox.com/"; case "ncz": return "http://www.nczonline.net/"; default: return "http://www.yahoo.com/"; } }

第二种使用一个包含命名空间信息的节点,来生成一个命名空间解析器。

<books xmlns:wrox="http://www.wrox.com/" xmlns="http://www.amazon.com/"> <wrox:book>Professional JavaScript</book> </books>

<books>元素包含了所有的命名空间信息,你可以把这个节点的引用传给XPathEvaluator对象的createNSResovler()方法,然后可以自动的得到一个命名空间解析器。
如:

var evaluator = new XPathEvaluator(); var resolver = evaluator.createNSResolver(xmldoc.documentElement);

使用上面的任意一个方法可以很容易的在含有命名空间xml文档中进行查询。

var evaluator = new XPathEvaluator(); var resolver = evaluator.createNSResolver(xmldoc.documentElement); var result = evaluator.evaluate("wrox:book", xmldoc.documentElement, resolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null); if (result){ alert(result.singleNodeValue.firstChild.nodeValue); }

注意:如果你在含有命名空间的xml文当中执行查询,不提供命名空间解析器,就会发生错误。

目录
相关文章
|
3月前
|
数据采集 Web App开发 JavaScript
利用Selenium和XPath抓取JavaScript动态加载内容的实践案例
利用Selenium和XPath抓取JavaScript动态加载内容的实践案例
|
JavaScript 前端开发
JS javascript 点击鼠标 鼠标事件 获取元素 获取元素Xpath
JS javascript 点击鼠标 鼠标事件 获取元素 获取元素Xpath
172 0
|
JavaScript 前端开发
JavaScript 技术篇 - js通过xpath路径定位元素方法
JavaScript 技术篇 - js通过xpath路径定位元素方法
1025 0
JavaScript 技术篇 - js通过xpath路径定位元素方法
|
JavaScript
JS命名空间是啥?
JS命名空间是啥?
|
JavaScript 前端开发
JavaScript 技术篇-js通过xpath获取dom节点,js校验xpath唯一性
JavaScript 技术篇-js通过xpath获取dom节点,js校验xpath唯一性
806 0
|
JavaScript C++ Java
|
前端开发 JavaScript C#