文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>JavaScript借助xpath操纵xml数据

JavaScript借助xpath操纵xml数据

时间:2010-04-20  来源:qbq

今天在看Chrome插件开发,有个gmail的插件,关键语句:  

var fullCountSet = xmlDoc.evaluate("/gmail:feed/gmail:fullcount",
            xmlDoc, gmailNSResolver, XPathResult.ANY_TYPE, null);


这里用到的是xpath操纵xml数据

google mail的responseXML格式如下:

 

<FEED xmlns="http://purl.org/atom/ns#" version="0.3">

<TAGLINE>New messages in your Gmail Inbox</TAGLINE>
<FULLCOUNT>1</FULLCOUNT>
<LINK rel="alternate" href="http://mail.google.com/mail" type="text/html">
<MODIFIED>2010-04-20T05:05:43Z</MODIFIED>
<ENTRY>

<SUMMARY>
<LINK rel="alternate" href="http://mail.google.com/mail?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>[email protected]</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/>起,匹配位于<bookstore/>元素下的子节点<book/>元素。
bookstore[positon\(\)=1]/book
含义:从<bookstore/>起,匹配位于<bookstore/>元素下的第一个子节点<book/>元素。
bookstore/book/title[@lang='en'] 
含义:从<bookstore/>起,匹配位于<bookstore/>元素下的子节点属性lang=en的<title/>元素。
在表达式中@是attribute的缩写。
bookstore/book[title[@lang='en']]
含义:从<bookstore/>起,匹配位于<bookstore/>元素下的子节点title的属性lang=en的<book/>元素。
在表达式中@是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
http://www.w3.org/TR/xpath
http://www.cqzol.com/programming/624589.html

  http://www.w3schools.com/xpath/xpath_examples.asp
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载