如何使用XPath入門_Xml教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:XSL教程之匹配模式的學(xué)習(xí)
      xsl:template 元素定義了用于匹配節(jié)點的規(guī)則(match,其中/匹配整個文檔),在apply-template使用 語法規(guī)則為: xsl:template name=name match=pattern mode=mode priority=number !-- Content:(xsl:param*,template) -- /xsl:template 其中: nam

      什么是XPath

      XPath(可擴展路徑) 是給 XSL 轉(zhuǎn)換[XSLT]和 XPointer [XPointer]的共享功能提供一個共用的句法及語義的結(jié)果。XPath的主要的目是用于對 XML 文檔元件尋址。在支持這個主要目的的同時,它也為字符串,數(shù)字和布爾的操作提供了基本手段。XPath 使用簡明的、非 XML 句法以便於在 URIs 和 XML 屬性值以內(nèi)使用 XPath,XPath 對 XML 文檔的抽象的、邏輯的結(jié)構(gòu)而非它的表面句法進(jìn)行操作,XPath 的名字源于它在 URL 中用作對 XML 文檔的層次的結(jié)構(gòu)進(jìn)行導(dǎo)航一個路徑標(biāo)志。
      除了用做尋址外,XPath 也被設(shè)計成以便它有能被用于匹配的一個自然的子集(測試一個節(jié)點是否匹配一個模式);XSLT中描述了 XPath 在這方面的使用。
      XPath 將一個 XML 文檔建模成為一棵節(jié)點樹,有不同類型的節(jié)點,包括元素節(jié)點,屬性節(jié)點和正文節(jié)點。XPath 定義了一種方法來計算每類的節(jié)點的字串值。一些節(jié)點的類型也有名字。XPath 充分支持 XML 命名空間[XML Names]。這樣,節(jié)點的名字被建模成由一個局城部分和可能為空的命名空間 URI 組成的對;這被稱為擴展名。

      XPath返回的類型

      1:節(jié)點集合(無序的、無重復(fù)的節(jié)點集合)
      2:布爾(真或假)
      3:數(shù)字(一個浮點數(shù)字)
      4:字符串(UCS 字符的順序)

      地址路徑

       
      地址路徑是Xpath用于定位的一條語句
      ,基本的語法如下:
      / 選擇XML文檔的根結(jié)點
      /* 選擇根結(jié)點的所有子節(jié)點,
      *匹配任意子節(jié)點
      /x 選擇根結(jié)點的所有x元素
      //book 選擇根結(jié)點的所有后代節(jié)點中的book元素
      //@id 選擇含有id屬性的子節(jié)點
      para[1] 選擇上下文節(jié)點的第一個 para 孩子
      //vendor[@id='id1_2']/book 選擇符合“屬性id=’id1_2’”的所有book元素
      /bib/vendor/book[year>2002] 選擇符合“元素year>’2002’”的所有book元素
      text() 選擇上下文節(jié)點的所有的正文節(jié)點孩子
      @name 選擇上下文節(jié)點的 name 屬性
      @* 選擇上下文節(jié)點的所有的屬性
      */para 選擇上下文節(jié)點的所有的 para 孫子
      /doc/chapter[5]/section[2] 選擇doc的第五個 chapter 的第二個 section
      .//para 選擇上下文節(jié)點的 para 元素子孫
      para[@type="warning"] 選擇的上下文節(jié)點的所有的有屬性 type 且值為 warning 的 para 孩子
      chapter[title="Introduction"] 選擇上下文節(jié)點的 chapter 孩子如果它有一個或多個 title 孩子且字串值為 Introduction
      employee[@secretary and @assistant] 選擇上下文節(jié)點的所有既有 secretary 屬性又有 assistant 屬性的 employee 孩子
      chpater[title] 選擇的上下文節(jié)點中有一個或一個以上 title 孩子的 chpater 孩子


      1:child 是缺省軸。例如,地址路徑 div/para 是 child:iv/child::para 的縮寫。
      2:屬性也有縮寫形式: attribute:: 能被縮寫成 @。例如,地址路徑 para[@type="warning"] 為 child::para[attribute::type="warning"] 的縮寫,也就是選擇有 type 屬性且屬性值為 warning 的 para 孩子。
      3:// 是 /descendant-or-self::node()/ 的縮寫。例如,//para 是 /descendant-or-self::node()/child::para 的縮寫,因此選擇文檔中所有的 para 元素(即使 para 元素是文檔元素,也會被 //para 所選擇,因為文檔元素是根節(jié)點的孩子); div//para 是 div/descendant-or-self::node()/child::para 的縮寫,因此將選擇 div 孩子的所有 para 子孫

      核心函數(shù)庫

      節(jié)點集合函數(shù)

      last()返回一個數(shù)字,該數(shù)字等于從表達(dá)式求值上下文中的上下文大小
      position()函數(shù)返回一個數(shù)字,該數(shù)字等於從表達(dá)式求值上下文中的上下文位置
      count(node-set)函數(shù)返回在參數(shù)node-set中節(jié)點的個數(shù)
      id(object)通過元素的唯一的ID選擇他們
      local-name(node-set?)返回一個節(jié)點的擴展名的局域部分
      namespace-uri(node-set?)返回依照文檔順序參數(shù)節(jié)點集合中的第一個節(jié)點的擴展名的命名空間 URI,除了元素節(jié)點和屬性節(jié)點外函數(shù) namespace-uri 返回的字符串將為空
      name(node-set?)返回一個字符串,字符串包含一個QName,它代表依照文檔順序參數(shù)節(jié)點集合中的第一個節(jié)點的擴展名,除了元素節(jié)點和屬性節(jié)點外,由 name 函數(shù)返回的字符串將與 local-name 函數(shù)返回的字符串一樣

      字符串函數(shù)

      string(object?)函數(shù)將對象轉(zhuǎn)換成字符.
      concat(string, string, string*) 函數(shù)返回它的參數(shù)的聯(lián)結(jié)
      starts-with(string, string)如果第一個字符串參數(shù)以第二個字符串參數(shù)起頭,starts-with 函數(shù)返回真,否則,返回假
      contains(string, string)如果第一個字符串參數(shù)包含第二個字符串參數(shù),contains 函數(shù)返回真,否則,返回假
      substring-before(string, string)函數(shù)返回第一個字符串參數(shù)在第二個參數(shù)首次出現(xiàn)之前的子字符串,或者,如果第一個字符串參數(shù)不包含第二個字符串參數(shù)則返回空字符串。例如,substring-before("1999/04/01","/") 返回 1999
      substring-before(string, string)函數(shù)返回第一個字符串參數(shù)在第二個參數(shù)首次出現(xiàn)之前的子字符串,或者,如果第一個字符串參數(shù)不包含第二個字符串參數(shù)則返回空字符串。例如,substring-before("1999/04/01","/") 返回 1999
      substring( string , number , number? )函數(shù)返回第一個字符串參數(shù)從第二個參數(shù)所指定的位置開始,以第三個參數(shù)為長度的子字符串。例如, substring("12345",2,3) 返回 "234"。如果沒有第三個參數(shù),則返回從第二個參數(shù)所指定的位置開始直到結(jié)束。例如, substring("12345",2) 返回"2345"
      string-length( string? )返回字符串中字符的個數(shù)
      normalize-space(string?)函數(shù)返回空白符規(guī)范化 后的參數(shù)字符串,該規(guī)范化是清除領(lǐng)頭及結(jié)尾的空白字以及用一個空白符替換連續(xù)的空白符
      translate(string, string, string)函數(shù)返回第一個參數(shù)的字符串,其中有在第二個參數(shù)中出現(xiàn)的字符都被在第三個參數(shù)中相對應(yīng)位置的字符所替換。例如,translate("bar","abc","ABC") 返回字符串 BAr。如果,第二個參數(shù)里的字符在第三個參數(shù)的相對應(yīng)位置沒有字符(因為第二個參數(shù)里的字符串比第三個參數(shù)的字符串長),那么,第一個參數(shù)里的那個字符將被移去。例如,translate("--aaa--","abc-","ABC") 返回 "AAA"。如果在第二個參數(shù)里的字符出現(xiàn)超過一次,那么,第一次的出現(xiàn)決定替換的字符。如果第三個參數(shù)里的字符串比第二個參數(shù)的字符串長, 那么,多余的字符將被忽略

      布爾函數(shù)
      boolean(object)
      not(boolean)
      true()
      false()
      lang(string)

      數(shù)字函數(shù)
      number(object?)函數(shù)參數(shù)依下列各項轉(zhuǎn)換成數(shù)字
      sum(node-set)對於在參數(shù)節(jié)點集合的每個節(jié)點,sum 函數(shù)返回節(jié)點字串值轉(zhuǎn)換成數(shù)字后的和
      floor(number)函數(shù)返回不大於參數(shù)的整數(shù)的最大數(shù) (最接近于正無窮大)
      ceiling(number)函數(shù)返回不小於參數(shù)的整數(shù)的最小數(shù) (最接近于負(fù)無窮大)
      round(number) 函數(shù)返回最接近于參數(shù)的整數(shù)。如果有兩個這樣的數(shù)字,那么,返回最接近于正無窮大的那個。如果參數(shù)是 NaN,那么返回 NaN。如果參數(shù)是正無窮大,那么返回正無窮大。如果參數(shù)是負(fù)無窮大,那么返回負(fù)無窮大。如果參數(shù)是正零,那么返回正零。如果參數(shù)是負(fù)零,那么返回負(fù)零。如果參數(shù)小於零,但大於或等於 -0.5 ,那么返回負(fù)零。

      參照規(guī)范

      XML See See http://www.w3.org/TR/1998/REC-xml-19980210
      XML Nameshttp://www.w3.org/TR/REC-xml-names

      XSLT See http://www.w3.org/TR/xslt
       

      分享:解析測試模式的實例學(xué)習(xí)
      xslt支持的測試模式語句,用于條件判斷,主要有: xsl:if 和xsl:choose及其下的xsl:when和xsl:otherwise 還是在 匹配模式 中使用的用戶列表數(shù)據(jù)源。 1:使用 xsl:if ?xml version=1.0 encoding=GB2312? xsl:stylesheet version=1.0 xmlns:xsl=http://ww

      來源:模板無憂//所屬分類:Xml教程/更新時間:2010-02-01
      相關(guān)Xml教程