`
blueion
  • 浏览: 40473 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JavaScript的XPath

阅读更多

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 实现

    这篇博文“javascript XPath 实现”可能详细介绍了如何在JavaScript中使用XPath来查询和操作XML文档。 首先,XPath的基本概念包括路径表达式、轴、节点测试和谓语等。路径表达式用于描述XML文档中的节点路径,如"/...

    javascript-xpath-latest.js

    javascript-xpath, 虽然比firefox还是慢,但也快多了,上面的例子只需要不 到1秒。换法很简单,如下: selenium = new DefaultSelenium(location, port, browser, targetPath); selenium.start(); selenium....

    xpath2.js:xpath.js-JavaScript中的开源XPath 2.0实现(与DOM无关)

    xpath2.js-XPath 2查询语言的纯JavaScript实现关于xpath2.js是JavaScript中与DOM无关的开源实现。 执行引擎使用规范规定的XML Schema 1.1数据类型进行操作。特征全面的语言支持通过自定义DOMAdapter使用XPath 2.0...

    JavaScript与Xpath

    JavaScript 和 XPath 是两种在 web 开发中非常重要的技术。JavaScript 是一种广泛使用的客户端脚本语言,主要用于增强网页的交互性和动态性,而 XPath 则是 XML Path Language 的简称,主要用来在 XML 文档中查找、...

    xpath.js:xpath.js-JavaScript中的开源XPath 2.0实现(与DOM无关)

    ------------------------------------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指定的接口已经...

    前端项目-jsel.zip

    **前端项目-jsel.zip** 是一个专为JavaScript对象提供DOM3 XPath实现的前端开发资源包。XPath是一种在XML文档中查找信息的语言,它允许我们选取节点、表达式以及计算节点集合。在JavaScript环境中,XPath可以帮助...

    XPathHelper_2.0.2.zip

    该压缩文件中的"xpath"可能是指XPath Helper插件的主文件,可能包括JavaScript代码、CSS样式表、图标以及其他必要的资源文件,这些文件共同构成了插件的核心功能。安装这个扩展通常只需将zip文件解压并拖放到Chrome...

    js-xpath:XPath Parser for Javascript

    使用Jison解析器/生成器JavaScript的XPath解析器/生成器。 演示版 有关解析xpath表达式的非常简单的用法,请参见文件。 用法 首先在文档中包含库以及xpath.js和models.js文件。 然后尝试以下操作以开始使用。 var ...

    xpath-helper工具

    在这个场景中,XPath Helper 被设计为辅助JavaScript开发者的工具,便于他们在网页开发和自动化测试中提取所需信息。 XPath表达式是这个工具的核心。通过输入XPath查询,开发者可以快速定位到HTML文档中的特定元素...

    ff30 firebug2.0.2 xpath checker0.4.4

    FF30 Firebug 2.0.2与XPath Checker 0.4.4是针对Firefox 30浏览器的两款重要扩展。Firebug是一款强大的Web开发工具,而XPath Checker则是一款用于验证XPath表达式的实用工具。这两款扩展在开发和调试网页时提供了...

    JS中常用的xpath特性

    在JavaScript中,XPath主要被用来查询DOM(Document Object Model)结构中的节点。通过XPath表达式,我们可以方便地选取XML或HTML文档中的元素,而无需遍历整个DOM树。以下是对给定标题和描述中所列举的XPath特性的...

    XPath教程(描述XPath的用法)

    XPath是一种在XML文档中查找信息的语言,用于...在XML解析、XSLT转换以及许多现代编程语言(如Java、Python、JavaScript)中,XPath都是一个核心工具。通过熟练掌握XPath,开发者能够高效地从XML文档中提取和操作数据。

    Xpath

    此外,许多编程语言如Java、Python、JavaScript等也提供了对XPath的支持,以便在处理XML数据时进行查询和操作。 博客链接中提到的iteye博客可能详细讨论了XPath的使用方法和实例,建议参考学习以加深理解。同时,`...

    谷歌扩展程序xpath.rar

    这可能表示压缩包内包含的是扩展程序的主文件,可能是JavaScript代码、HTML界面或者JSON配置文件,这些文件构成了扩展程序的核心部分。安装这个扩展后,用户可以直接在谷歌浏览器中执行XPath查询,而无需额外的软件...

    XPath官方文档 教程

    它们提供了API或者库,如Java的`javax.xml.xpath`,Python的`lxml`,JavaScript的`document.evaluate`,以便于在代码中执行XPath表达式并获取结果。 六、XPath版本差异 XPath 2.0和3.1引入了更多特性,如类型系统、...

    XPath Helper:chrome爬虫网页解析工具

    5. **处理动态内容**:对于使用JavaScript动态加载的数据,XPath Helper可能无法直接捕获。这时,可能需要结合其他工具,如Chrome的开发者工具(DevTools)的"Network"面板,查看请求并模拟动态加载。 6. **配合...

    xPath(简单教程)

    例如,在JavaScript中,我们可以使用`document.evaluate()`方法来执行XPath表达式,选取XML或HTML文档中的特定节点。 学习XPath时,初学者应该从理解基本的路径表达式和节点类型开始,然后逐步掌握轴的概念、函数...

    chrome_Xpath_v2.0.2.rar

    2. 解压缩后,你会得到一个文件夹,里面包含了扩展的所有组件,如manifest.json(扩展的配置文件),可能还有JavaScript代码、CSS样式等。 3. 注意,描述中提到需要将路径下的"_metadata"文件夹或文件名改为...

Global site tag (gtag.js) - Google Analytics