今天在看Chrome插件开发,有个gmail的插件,关键语句:
var fullCountSet = xmlDoc.evaluate("/gmail:feed/gmail:fullcount", xmlDoc, gmailNSResolver, XPathResult.ANY_TYPE, null);
|
这里用到的是xpath操纵xml数据
google mail的responseXML格式如下:
<FEED xmlns="" version="0.3">
<TAGLINE>New messages in your Gmail Inbox</TAGLINE> <FULLCOUNT>1</FULLCOUNT> <LINK rel="alternate" href="" type="text/html"> <MODIFIED>2010-04-20T05:05:43Z</MODIFIED> <ENTRY>
<SUMMARY> <LINK rel="alternate" href="?account_id=loginname%40gmail.com&message_id=messageid&view=conv&extsrc=atom" type="text/html"> <MODIFIED>2010-03-15T10:34:13Z</MODIFIED> <ISSUED>2010-03-15T10:34:13Z</ISSUED> <ID>tag:gmail.google.com,2004:1330275159830028430</ID> <AUTHOR> <NAME>abc</NAME> <EMAIL>abc@163.com</EMAIL> </AUTHOR> </SUMMARY></ENTRY> </FEED>
|
关于使用xpath操纵xml数据:
book.xml
<?xml version="1.0" encoding="utf-8"?> <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 Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="WEB"> <title lang="zh">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
|
test.html
<html> <head> <title>xpath test</title> <mce:script type="text/javascript"><!-- var xmlDoc ; var exploer; loadXML(); //载入Xml文档 function loadXML(){ // IE 浏览器 if (window.ActiveXObject) { exploer='ie'; xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async= false; xmlDoc.load("books.xml"); } // Mozilla, Firefox, Opera浏览器 else if (document.implementation &&document.implementation.createDocument){ exploer='firefox'; xmlDoc = document.implementation.createDocument("","",null); xmlDoc.load("books.xml"); } else{ alert("由于你的浏览器不支持Javascript,目录树无法加载..."); } } function fnIEParse(path){ alert(path); var nodes = xmlDoc.selectNodes(path); for(var i=0;i<nodes.length;i++){ var node = nodes[i]; alert(node.xml); } } function fnFirefoxParse(path){ alert(path); var oNSResolver = xmlDoc.createNSResolver(xmlDoc.documentElement); var nodes = xmlDoc.evaluate(xpath,xmlDoc, oNSResolver,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); alert(""); } function fnSelectNodes(){ var path=document.getElementById("path").value; if(exploer=='ie'){ fnIEParse(path); }else if(exploer='firefox'){ fnFirefoxParse(path); }else{ alert("由于你的浏览器不支持Javascript,path..."); } } // --></mce:script> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head> <body> 输入xpath eg://book[title[@lang='en'] and price<=30]/title/text() <br> <input type="text" id="path" size="120"/> <input type="button" value="get nodes" onclick="fnSelectNodes()"/> <br> <div id="books"> <iframe src="books.xml" mce_src="books.xml" width="100%" height="90%"></iframe> </div> </body> </html>
|
两个文件放在同一个目录下即可。
运行test.html,输入
//book[title[@lang='en'] and price<=30]/title/text()
快看看效果吧!
输入这个呢?
/bookstore/book/year[.=2005]
XPath简介
每个XPath表达式都有两部分:一个上下文节点和一个节点模式。前者提供了节点模式起始的位置。后者是由一个或多个节点选择器组成的字符串。
比如我们使用表达式:
bookstore/book
含义:从起,匹配位于元素下的子节点元素。
bookstore[positon\(\)=1]/book
含义:从起,匹配位于元素下的第一个子节点元素。
bookstore/book/title[@lang='en']
含义:从起,匹配位于元素下的子节点属性lang=en的
元素。
在表达式中@是attribute的缩写。
bookstore/book[title[@lang='en']]
含义:从起,匹配位于元素下的子节点title的属性lang=en的元素。
在表达式中@是attribute的缩写
IE中的XPath支持
比如:var lstNodes = oxmlDom.documentElement.selectNodes(“bookstore/book”);
说明:selectNodes返回活的列表。所以可以这样迭代所有的元素
如果只需要匹配模式的第一个元素,可以使用selectSingleNode()。
XPath表达式语法:
http://hi.baidu.com/cn_wangwei/blog/item/4ed5efd37eeb4a36960a16a6.html
http://www.cnblogs.com/chinaicm/archive/2008/07/04/1235249.html
阅读(2030) | 评论(0) | 转发(0) |