XPath是一种轻量级的解析XML方式,现在大部分浏览器没有完全支持W3C的DOM Level 3 XPath特性。但是如果只是在一般的场合使用,XPath也是一个快速,高效的解析XML的手段。
下面的代码在IE6、7,FF2、3,Chrome,Safari测试通过:
function XMLUtil(xmldoc){ //XMLUtil 对象
this.xmlDom = null;
this.isIE = false;
this.setXmlDom = function(/*xmlString*/xmldoc){
this._setXmlDom(xmldoc);
}
/*get an xml node*/
this.getXmlItem = function(/*xml query path*/path,NSResolver){
//return string
if(!NSResolver){ //支持nameSpace
NSResolver = null;
}
if (this.isIE) {
return this.xmlDom.selectSingleNode(path).text;
}else{
var xmlEvaluator = new XPathEvaluator();
var results = xmlEvaluator.evaluate(path,this.xmlDom.documentElement,NSResolver,XPathResult.STRING_TYPE,null);
return results.stringValue;
}
};
/*get xml nodes*/
this.getXmlItems = function(/*xml query path*/path,NSResolver){
//return string Array
var xmlArray = [];
if(!NSResolver){
NSResolver = null;
}
if (this.isIE) {
var xmlItems = this.xmlDom.selectNodes(path);
for (var i=0;i<xmlItems.length;i++){
xmlArray[i] = xmlItems.item(i).text;
}
}else{
var xmlEvaluator = new XPathEvaluator();
var results = xmlEvaluator.evaluate(path,this.xmlDom.documentElement,NSResolver,XPathResult.UNORDERED_NODE_ITERATOR_TYPE,null);
var xmlItem = results.iterateNext();
var i = 0;
while(xmlItem){
xmlArray[i] = xmlItem.textContent;
xmlItem = results.iterateNext();
i++;
}
}
return xmlArray;
};
/*
* set the xml doc
*/
this._setXmlDom = function(xmldoc){
if (window.ActiveXObject) {
this.isIE = true;
try{
var XmlDom = new ActiveXObject("Microsoft.XMLDOM");
XmlDom.loadXML(xmldoc);
}
catch (error){console.debug('xml parser error');}
}
else {
this.isIE=false;
var oParser = new DOMParser();
try{
var XmlDom = oParser.parseFromString(xmldoc,"text/xml");
}catch (error){console.debug('xml parse error'+error.toString);}
}
this.xmlDom = XmlDom;
};
}
调用代码:
var parser = new XMLUtil();
parser.setXmlDom(/*String*/xml);
var cred = parser.getXmlItem("//root/branch/cred");
如果需要支持nameSpace,则需要自定义一个namespace解析函数:
var parser = new XMLUtil();
parser.xmlDom = data;
var ns = function NSResolver(prefix){
if (prefix == 'serv') {
return 'http://www.g.com/schemas/service';
}else if (prefix == 'com') {
return 'http://www.g.com/schemas/common';
}else if(prefix =='meet') {
return 'http://www.g.com/schemas/service/meeting';
}else if(prefix == 'ep'){
return 'http://www.g.com/schemas/service/ep';
}else if (prefix == 'xsi') {
return 'http://www.w3.org/2001/XMLSchema-instance';
}
}
var result = parser.getXmlItem("//serv:message/serv:header/serv:response/serv:result",ns);
XPath的缺点是只能解析XMLDOM,不能解析HTML;它只提供最基本的解析XML功能(返回node和nodeSet)。
分享到:
相关推荐
javascript-xpath, 虽然比firefox还是慢,但也快多了,上面的例子只需要不 到1秒。换法很简单,如下: selenium = new DefaultSelenium(location, port, browser, targetPath); selenium.start(); selenium....
NULL 博文链接:https://leeyee.iteye.com/blog/685352
xpath2.js-XPath 2查询语言的纯JavaScript实现关于xpath2.js是JavaScript中与DOM无关的开源实现。 执行引擎使用规范规定的XML Schema 1.1数据类型进行操作。特征全面的语言支持通过自定义DOMAdapter使用XPath 2.0...
------------------------------------XPath.js - Pure JavaScript implementation of XPath 2.0 parser and evaluator------------------------------------Copyright (c) 2012 Sergey IlinskyDual licensed under ...
JavaScript与Xpath学习技术参考
Xpath现在很少被我们使用,因为JSON现在很盛行。可是在XML做为数据交换格式的年代,Xpath在我们随机访问大的xml文档结构的时候扮演着非常重要的位置。也许大家现在很多没有注意到,DOM Level 3 XPath指定的接口已经...
使用Jison解析器/生成器JavaScript的XPath解析器/生成器。 演示版 有关解析xpath表达式的非常简单的用法,请参见文件。 用法 首先在文档中包含库以及xpath.js和models.js文件。 然后尝试以下操作以开始使用。 var ...
wicked-good-xpath, 纯JS实现DOM级别 3 XPath规范 很好的XPath Wicked XPath是谷歌编写的DOM级别 3 XPath规范的纯JavaScript实现。 它为每个浏览器中的HTML文档启用XPath评估。 我们相信它是JavaScript中最快的XPath...
javascript完全自学手册 目 录 第1篇 JavaScript基础篇 第1章 JavaScript简介 1 1.1 JavaScript概述 1 1.1.1 什么是JavaScript 1 1.1.2 JavaScript的基本特点 2 1.1.3 常用的Web开发语言 3 1.2 JavaScript的应用 4 ...
将XPath命令添加到测试运行程序 用npm安装 npm install -D cypress-xpath 用纱安装 yarn add cypress-xpath --dev 然后将其包含在您项目的cypress/support/index.js require ( 'cypress-xpath' ) 使用 安装后,您的...
第1篇 JavaScript基础篇 第1章 JavaScript简介 1.1 JavaScript概述 1.1.1 什么是JavaScript 1.1.2 JavaScfipt的基本特点 1.1.3 常用的Web开发语言 1.2 JavaScript的应用 1.2.1 客户端应用 1.2.2 服务器...
Use XPath and XSLT on XML documents loaded with Ajax And much more Part III is a complete reference for core JavaScript. It documents every class, object, constructor, method, function, property,...
Use XPath and XSLT on XML documents loaded with Ajax And much more Part III is a complete reference for core JavaScript. It documents every class, object, constructor, method, function, property,...
13.2.js 跨浏览器兼容的XPath实现。 13.3.xml 使用XSLT实现“Hello World”的XML文件。 13.4.xsl 使用XSLT实现“Hello World”的XSLT文件。 13.5.html 内嵌的XML数据岛。 13.6.html 外嵌的XML...
Hali是一个开源,轻量级的现代JavaScript实用程序,用于评估在TypeScript之上构建的XPath表达式。 该工具是专为Web抓取而设计的,可以集成到新的或现有的Web搜寻器中。 安装 # using NPM npm i @remotemerge/hali #...
xsl xml xpath javascript param 绝对超值,你值得拥有!
Use XPath and XSLT on XML documents loaded with Ajax And much more Part III is a complete reference for core JavaScript. It documents every class, object, constructor, method, function, property, ...
VBScript JavaScript Dhtml SQL WSH DOM XML CSS参考手册大全,大合集,贡献给大家
在Ajax应用中使用XPath和XSLT加载XML文档对象;以及更多 第三部分全面介绍了JavaScript语言的核心。讲述了在JavaScript 1.5和ECMAScript version 3中定义的每一个类、对象、构造器、方法、函数、属性和常量。 第四...