<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    當前位置

    當我們使用XSLT處理XML源文檔是,我們用Context來表示當前正在被模板處理的節點位置。比如xsl:template match="/"語句中表示Context在文檔的根(root)節點。我不知道如何準確的翻譯Context這個詞,它類似于C語言里的指針,表示程序當前運行的位置。理解Context對于正確處理XSL模板非常重要,當您的XSL模板輸出的文檔和您想要的不一樣,最先應該分析的就是Context在哪里。

    Location Paths是用于設定你想要尋找的Context節點位置。就類似DOS的目錄命令。我們看個例子

    <xsl:for-each select="child::PEOPLE/descendant::PERSON"> 
    

    其中child::PEOPLE/descendant::PERSON就是XPath語法,這個表達式就是一個Location Paths,代碼說明要顯示所有PEOPLE元素的子元素和所有PERSON元素的子元素。通常我們會采用更簡單的寫法:

    <xsl:for-each select="PEOPLE//PERSON"> 
    
    我們來解釋path的兩種表示方法:"/"和"http://"。
    
    "/"是表示當前文檔的節點,類似DOS目錄分割符。
    
    例如:
    
    /PEOPLE表示選擇根節點下的PEOPLE元素;
    
    PEOPLE/PERSON表示選擇PEOPLE元素下所有的PESON子元素。
    
    "http://"則表示當前文檔所有的節點。類似查看整個目錄。
    
    例如:
    
    //PEOPLE表示選擇文檔中所有的PEOPLE元素,無論它在什么層次;
    
    PEOPLE//PERSON表示在PEOPLE元素下所有的PERSON元素,無論它的層次多深。
    
    

    尋址操作

    Axis和Predicate是XPath語法中對Location Paths進行定位操作的語法,具體的用法列表如下

    Axis語法表
    --------------------------------------------------------
    表達式 簡寫 說明
    --------------------------------------------------------
    self . 選擇當前的節點.。
    例子 :
    <TD><xsl:value-of select="."/></TD>
    代碼表示在當前位置插入當前的節點包含的文本(text)值,
    --------------------------------------------------------
    parent .. 選擇當前節點的父節點。 
    --------------------------------------------------------
    attribute @ 選擇一個元素的所有屬性。 
    例子:
    <TD><xsl:value-of select="@PERSONID"/></TD>
    選擇PERSON元素的所有屬性.
    --------------------------------------------------------
    child 選擇當前節點的所有子元素。
    --------------------------------------------------------
    ancestor 選擇當前節點的所有父元素(包括父元素的父元素,類推)
    --------------------------------------------------------
    

    Axis幫助我們選擇當前節點周圍所有的節點,而Predicate則用來定位當前節點內部的元素。表示方法為方括號[]中加表達式:[ Expression ]。具體舉例如下:

    PERSON[position()=2] 
    這句代碼表示尋找第二個"PERSON" 元素
    
    PERSON[starts-with(name, "B")] 
    這句代碼表示尋找所有名稱以"B"開頭的PERSON元素。 
    

    運算符

    這一節介紹XPath的運算符(Expressions),列表如下:

    --------------------------------------------------------
    運算符 說明
    --------------------------------------------------------
    and, or 就是普通意義的and, or 
    --------------------------------------------------------
    = 等于
    --------------------------------------------------------
    != 不等于
    --------------------------------------------------------
    >, >= 大于,大于等于
    --------------------------------------------------------
    <, <= 小于,小于等于。注意:在XSL文件中,<符號要用&lt; 表示
    --------------------------------------------------------
    +, -, *, div 加減乘除 
    --------------------------------------------------------
    mod 取模
    --------------------------------------------------------
    | 兩個節點一起計算
    --------------------------------------------------------
    

    功能函數(Functions)

    在XPath里有很多功能函數可以幫助我們精確尋找需要的節點。

    count()功能
    作用:統計計數,返回符合條件的節點的個數。
    舉例:<p><xsl:value-of select="count(PERSON[name=tom])"/></p>
    說明:代碼的用途是顯示PERSON元素中姓名屬性值為tom有幾個。
    
    number()功能
    作用:將屬性的值中的文本轉換為數值。
    舉例:<p>The number is: <xsl:value-of select="number(book/price)"/></p>
    說明:代碼的用途是顯示書的價格。
    
    substring() 功能
    語法:substring(value, start, length)
    作用:截取字符串。
    舉例:<p><xsl:value-of select="substring(name, 1, 3)"/></p>
    說明:代碼的用途是截取name元素的值,從第一個字母開始顯示到第三個。
    
    sum()功能
    作用:求和。
    舉例:<p>Total Price = <xsl:value-of select="sum(//price)"/></p>
    說明:代碼的用途是計算所有價格的和。









    normalize-space()刪除了前部和尾部的空格

    //BBB[normalize-space(@name)='bbb']------ 選擇含有屬性 name 且其值 ( 在用 normalize-space 函數去掉前后空格后 ) 'bbb' BBB 元素

    name()
    函數返回元素的名稱
    //*[name()='BBB']----選擇所有名稱為BBB的元素(這里等價于//BBB)


    start-with() 函數在該函數的第一個參數字符串是以第二個參數字符開始的情況返回 true
    //*[starts-with(name(),'B')]-----選擇所有名稱以"B"起始的元素
    contains()
    函數當其第一個字符串參數包含有第二個字符串參數時返回 true.
    //*[contains(name(),'C')]-----選擇所有名稱包含"C"的元素

    多個路徑可以用分隔符 | 合并在一起,可以合并的路徑數目沒有限制
    //CCC | //BBB-----選擇所有的CCCBBB元素
    /AAA/EEE | //BBB--- 選擇所有的 BBB 元素和所有是 AAA 的子元素的 EEE 元素
    <AAA>
              <
    BBB
    />
              <CCC/>
              <DDD>
                   <CCC/>
              </DDD>
              <
    EEE
    /> 
    </AAA>

    child (axis) 包含上下文節點的子元素 , 作為默認的軸 , 可以忽略不寫 .
    /AAA----等價于 /child::AAA
    /AAA/BBB----等價于/child::AAA/child::BBB
    二者都可以被合并----/child::AAA/BBB

    descendant (后代)軸包含上下文節點的后代,一個后代是指子節點或者子節點的子節點等等, 因此descendant軸不會包含屬性和命名空間節點.
    /descendant::*-----選擇文檔根元素的所有后代.即所有的元素被選擇
    /AAA/BBB/descendant::*-----選擇/AAA/BBB的所有后代元素
    //CCC/descendant::*----選擇在祖先元素中有CCC的所有元素
    //CCC/descendant::DDD----選擇所有以CCC為祖先元素的DDD元素
      <AAA>
              <BBB>
                   <DDD>
                        <CCC>
                             <
    DDD
    />
                             <EEE/>
                        </CCC>
                   </DDD>
              </BBB>
              <CCC>
                   <
    DDD
    >
                        <EEE>
                             <
    DDD
    >
                                  <FFF/>
                             </
    DDD
    >
                        </EEE>
                   </
    DDD
    >
              </CCC
      </AAA>

    parent (axis) 包含上下文節點的父節點 , 如果有父節點的話
    //DDD/parent::*---選擇DDD元素的所有父節點

    ancestor(axis)包含上下節點的祖先節點, 該祖先節點由其上下文節點的父節點以及父節點的父節點等等諸如此類的節點構成,所以ancestor軸總是包含有根節點,除非上下文節點就是根節點本身.
    /AAA/BBB/DDD/CCC/EEE/ancestor::*----選擇一個絕對路徑上的所有節點
       < AAA >
              <
    BBB
    >
                   <
    DDD
    >
                        <
    CCC
    >
                             <DDD/>
                             <EEE/>
                        </
    CCC
    >
                   </
    DDD
    >
              </
    BBB
    >
              <CCC>
                   <DDD>
                        <EEE>
                             <DDD>
                                  <FFF/>
                             </DDD>
                        </EEE>
                   </DDD>
              </CCC
       </
    AAA >

    //FFF/ancestor::*----- 選擇 FFF 元素的祖先節點

    following-sibling (axis) 包含上下文節點之后的所有兄弟節點
    /AAA/BBB/following-sibling::*
    //CCC/following-sibling::*

    preceding-sibling (axis) 包含上下文節點之前的所有兄弟節點
    /AAA/XXX/preceding-sibling::*
    //CCC/preceding-sibling::*
          <AAA>
              <
    BBB>
                   <CCC/>
                   <DDD/>
              </
    BBB>
              <
    XXX>
                   <DDD>
                        <
    EEE/>
                        <
    DDD/>
                        <CCC/>
                        <FFF/>
                        <FFF>
                             <GGG/>
                        </FFF>
                   </DDD>
              </
    XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

    following (axis) 包含同一文檔中按文檔順序位于上下文節點之后的所有節點 , 除了祖先節點 , 屬性節點和命名空間節點

    /AAA/XXX/following::*
        <AAA>
              <BBB>
                   <CCC/>
                   <ZZZ>
                          <EEE/>
                   </ZZZ>
                   <FFF>
                        <GGG/>
                   </FFF>
              </BBB>
              <XXX>
                   <DDD>
                        <CCC/>
                        </DDD>
              </XXX>
              <
    CCC
    >
                   <
    DDD
    />
              </
    CCC

        </AAA>
    //ZZZ/following::*
        <AAA>
              <BBB>
                   <CCC/>
                   <ZZZ>
                        <DDD/>
                        <DDD>
                             <EEE/>
                        </DDD>
                   </ZZZ>
                   <
    FFF>
                        <
    GGG/>
                   </
    FFF>
              </BBB>
              <
    XXX>
                   <
    DDD>
                        <
    EEE/>
                        <
    DDD/>
                        <
    CCC/>
                        <
    FFF/>
                        <
    FFF>
                             <
    GGG/>
                        </
    FFF>
                   </
    DDD>
              </
    XXX>
              <
    CCC>
                   <
    DDD/>
              </
    CCC>
         </AAA>

    preceding (axis) 包含同一文檔中按文檔順序位于上下文節點之前的所有節點 , 除了祖先節點 , 屬性節點和命名空間節點
    /AAA/XXX/preceding::*

         <AAA>
              <
    BBB
    >
                   <
    CCC
    />
                   <
    ZZZ
    >
                        <
    DDD
    />
                   </
    ZZZ
    >
              </
    BBB
    >
              <XXX>
                   <DDD>
                        <EEE/>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

    //GGG/preceding::*
         <AAA>
              <
    BBB>
                   <
    CCC/>
                   <
    ZZZ>
                        <
    DDD/>
                   </
    ZZZ>
              </
    BBB>
              <XXX>
                   <DDD>
                        <
    EEE/>
                        <
    DDD/>
                        <
    CCC/>
                        <
    FFF/>
                        <FFF>
                             <GGG/>
                        </FFF>
                   </DDD>
              </XXX>
              <CCC>
                   <DDD/>
              </CCC>
         </AAA>

    descendant-or-self (axis) 包含上下文節點本身和該節點的后代節點
    /AAA/XXX/descendant-or-self::*

    ancestor-or-self (axis) 包含上下文節點本身和該節點的祖先節點
    /AAA/XXX/DDD/EEE/ancestor-or-self::*

    div 運算符做浮點除法運算
    mod
    運算符做求余運算
    floor
    函數返回不大于參數的最大整數 ( 趨近于正無窮 )
    ceiling
    返回不小于參數的最小整數 ( 趨近于負無窮 )

    //BBB[position() mod 2 = 0 ]---- 選擇偶數位置的 BBB 元素
    //BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]---- 選擇中間的 BBB 元素


    上面這些功能只是XPath語法中的一部分,還有大量的功能函數沒有介紹,而且目前XPath的語法仍然在不斷發展中。通過這些函數我們可以實現更加復雜的查詢和操作。

    看到這里,我們的入門教程就快結束了。通過走馬觀花式的快速學習,希望大家對XSLT應該有了一點基本概念:XSLT是一種轉換XML文檔的語言,它包含兩個過程:轉換和格式化。XSLT的功能比CSS強大得多,它有類似數據查詢的語法。如果您對XSLT感興趣,那么以上的知識是遠遠不夠的,需要查詢更多的資料。在最后一章附錄為大家提供了主要的XSLT資源。

    posted on 2006-09-18 09:18 周銳 閱讀(1044) 評論(0)  編輯  收藏 所屬分類: JavaXMLXSLT
    主站蜘蛛池模板: 日韩毛片免费在线观看| 人妻无码久久一区二区三区免费 | 每天更新的免费av片在线观看 | 亚洲人色大成年网站在线观看| 亚洲第一区香蕉_国产a| 亚洲AV电影院在线观看| 亚洲国产精品久久66| 91九色老熟女免费资源站| 在线观看亚洲网站| 亚洲精品国产成人中文| 国产成人麻豆亚洲综合无码精品| 在线a亚洲v天堂网2018| 91在线视频免费91| 毛片在线播放免费观看| 亚洲AⅤ男人的天堂在线观看| 亚洲人成电影网站色| 久久亚洲精品国产精品| 亚洲美女视频网站| 亚洲13又紧又嫩又水多| 亚洲一区二区无码偷拍| 最新亚洲人成无码网www电影| 亚洲影视自拍揄拍愉拍| 亚洲AV无码国产精品色午友在线| 国产乱弄免费视频| 一个人在线观看视频免费| 成人免费毛片观看| 国产成人免费手机在线观看视频| 成人AV免费网址在线观看| 日本不卡在线观看免费v| 亚洲国产日韩在线观频| 日本人护士免费xxxx视频| 亚洲男人在线无码视频| 久久久久亚洲精品成人网小说| 亚洲高清视频在线播放| 亚洲中文字幕乱码AV波多JI| 免费福利资源站在线视频| 免费在线中文日本| 一级成人a做片免费| 日本高清免费观看| 免费无码AV电影在线观看| 免费人成视频在线观看视频|