• <source id="scois"></source>
    您的位置:首頁 > 編程學習 > 其它 > 正文

    XPATH的用法

    更多 時間:2014-5-31 類別:編程學習 瀏覽量:5540

    XPATH的用法

    XPATH的用法

    XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。XPath 是 W3C XSLT 標準的主要元素,并且 XQuery 和 XPointer 同時被構建于 XPath 表達之上。因此,對 XPath 的理解是很多高級 XML 應用的基礎。

    一、XML文檔的模型

    對于良構的XML文檔,有三種模型表示:


    1、XPath數據模型

    把XML文檔的多數內容表示為一棵結點樹,樹的根結點代表文檔本身,其他結點有元素結點、屬性結點、文本結點、名稱空間結點、注釋結點等。XML聲明、DOCTYPE等不能表示為結點


    2、DOM

    采用樹形層次結構表示XML文檔


    3、XML信息表

    把XML文檔看作由信息項組成的一棵樹,每個信息項相當于XPath的一個結點,信息項可有若干屬性,屬性值表示信息項的特性

    二、結點類型

  • XPath中有七種結點類型:元素、屬性、文本、命名空間、處理指令、注釋以及文檔節點(或成為根節點)。文檔的根節點即是文檔結點;對應屬性有屬性結點,元素有元素結點。
  •  
  •  
  • 三、運算符及特殊字符
  •  
  •  
  • /
  • 此路徑運算符出現在模式開頭時,表示應從根節點選擇。
  • //
  • 從當前節點開始遞歸下降,此路徑運算符出現在模式開頭時,表示應從根節點遞歸下降。
  • .
  • 當前上下文。
  • ..
  • 當前上下文節點父級。
  • *
  • 通配符;選擇所有元素節點與元素名無關。(不包括文本,注釋,指令等節點,如果也要包含這些節點請用node()函數)
  • @
  • 屬性名的前綴。
  • @*
  • 選擇所有屬性,與名稱無關。
  • :
  • 命名空間分隔符;將命名空間前綴與元素名或屬性名分隔。
  • ( )
  • 括號運算符(優先級最高),強制運算優先級。
  • [ ]
  • 應用篩選模式(即謂詞,包括"過濾表達式"和"軸(向前/向后)")。
  • [ ]
  • 下標運算符;用于在集合中編制索引。
  • |
  • 兩個節點集合的聯合,如://messages/message/to | //messages/message/cc
  • -
  • 減法。
  • li,
  • 浮點除法。
  • and, or
  • 邏輯運算。
  • mod
  • 求余。
  • not()
  • 邏輯非
  • =
  • 等于
  • !=
  • 不等于
  • 特殊比較運算符
  • < 或者 &lt;
  • <= 或者 &lt;=
  • > 或者 &gt;
  • >= 或者 &gt;=
  • 需要轉義的時候必須使用轉義的形式,如在XSLT中,而在XMLDOM的scripting中不需要轉義。
  • 四、XPath實例

    1、XML文檔

  •  
  • XML 代碼   復制
  • 
    
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <bookstore>
    <book>
      <title lang="eng">Harry Potter</title>
      <price>29.99</price>
    </book>
    <book>
      <title lang="eng">Learning XML</title>
      <price>39.95</price>
    </book>
    </bookstore>
    
    		
  • 2、XPath獲取值

    bookstore

    選取 bookstore 元素的所有子節點

    /bookstore

    選取根元素 bookstore注釋:假如路徑起始于正斜杠( / ),則此路徑始終代表到某元素的絕對路徑!

    bookstore/book

    選取所有屬于 bookstore 的子元素的 book 元素。

    //book

    選取所有 book 子元素,而不管它們在文檔中的位置。

    bookstore//book

    選擇所有屬于 bookstore 元素的后代的 book 元素,而不管它們位于 bookstore 之下的什么位置。

    //@lang 

    選取所有名為 lang 的屬性。

    /bookstore/book[1]

    選取屬于 bookstore 子元素的第一個 book 元素。

    /bookstore/book[last()]

    選取屬于 bookstore 子元素的最后一個 book 元素。

    /bookstore/book[last()-1]

    選取屬于 bookstore 子元素的倒數第二個 book 元素。

    /bookstore/book[position()<3]

    選取最前面的兩個屬于 bookstore 元素的子元素的 book 元素。

    //title[@lang]

    選取所有擁有名為 lang 的屬性的 title 元素。

    //title[@lang='eng']

    選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性。

    /bookstore/book[price>35.00]

    選取所有 bookstore 元素的 book 元素,且其中的 price 元素的值須大于 35.00。

    /bookstore/book[price>35.00]/title

    選取所有 bookstore 元素中的 book 元素的 title 元素,且其中的 price 元素的值須大于 35.00。

    /bookstore/*

    選取 bookstore 元素的所有子節點

    //* 

    選取文檔中的所有元素

    //title[@*]

    選取所有帶有屬性的 title 元素。

    //book/title | //book/price

    選取所有 book 元素的 tilte 和 price 元素。

    //title | //price

    選取所有文檔中的 title 和 price 元素。

    /bookstore/book/title | //price

    選取所有屬于 bookstore 元素的 book 元素的 title 元素,以及文檔中所有的 price 元素。

    /root/child[3]

    {選取root元素的第三個child子元素,注意,這和數組下標不一樣,從1開始計數
     

    //child[@attr]

    {選取所有具有屬性attr的child元素
     

    //child[@attr="val"]/desc

    {選取所有屬性attr的值為val的child元素的子元素desc
     

    //child[desc]

    {選取所有的有desc子元素的child
     

    //child[position()>3]

     {position()是XPath中的一個函數,表示節點的位置
     

    //child[@attr>12]

    {XPath表達式還可以進行數值比較,該表達式將選取attr屬性值大于12的child元素


    //child[last()]

    {last()函數返回節點列表最后的位置,該表達式將選取最后一個child元素

    五、XPath在DOM,XSLT及XQuery中的應用

  •  
  • HTML 代碼   復制
  • 
    
    
    
    
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>XPath Test</title> 
    </head> 
    <body> 
    
    <script language="javascript" type="text/javascript"> 
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async="false"; 
    xmlDoc.load("messages。xml"); 
    xmlDoc.setProperty("SelectionLanguage", "XPath"); 
        var sPath = "/messages/message[1]//books/*[local-name()='book']"; 
    var bookNodes = xmlDoc.selectNodes(sPath); 
    
    document.write("<ul>"); 
    for ( var i = 0; i < bookNodes.length; i++) { 
    document.write("<li>" + bookNodes[i].childNodes[0].text + "</li>"); 
    } 
    document.write("</ul>"); 
    </script> 
    
    </body> 
    </html>
    
    		
  • 標簽:XPATH XML
    超碰狠狠干人人干
  • <source id="scois"></source>