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

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

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

    Vincent.Chan‘s Blog

    常用鏈接

    統計

    積分與排名

    網站

    最新評論

    XSL 學習筆記 —— 中級篇

    一、XSL的運算符

    表一、運算符與特殊字符

     運算符
    描述
    /

    選擇子元素,返回左側元素的直接子元素;如果"/"位于最左側表示選擇根結點的直接子元素
    //

    遞歸下降,不論深度,搜索指定的元素;如果位于最左側表示從根結點出發遞歸下降搜索指定元素
    .

    表示當前元素
    *

    通配符,選擇任意元素,不考慮名字
    @

    取得屬性值,作為屬性名的前綴

    @*

    通配符,選擇任意屬性,不考慮名字

    :

    名字作用范圍分隔符,將名字作用范圍前綴與元素或屬性名分隔開來
    !*

    在相關節點上應用指定方法
    ()*

    分組,明確指定優先順序
    []

    應用過濾樣式
    []*

    下標運算符,用于在集合中指示元素

      表二、邏輯運算符

     可選方式
    描述
    and $and$ 或 &&

    邏輯與
    or $or$ 或 ||

    邏輯或
    not() $not$

    邏輯非

      表三、關系運算符

     可選方式
    描述
    = 或 $eq$

    相等
    = 或 $ieq$

    相等(不區分大小寫)
    != 或 $ne$

    不等
    $ine$

    不等(不區分大小寫)
    < 或 $lt$

    小于
    $ilt$

    小于(不區分大小寫)
    <= 或 $le$

    小于等于
    $ile$

    小于等于(不區分大小寫)
    > 或 $gt$

    大于
    $igt$

    大于(不區分大小寫)
    >= 或 $ge$

    大于等于
    $ige$

    大于等于(不區分大小寫)
    $all$

    集合運算符,如果集合中所有項目均滿足條件則返回"真"
    $any$

    集合運算符,如果集合中任意項目滿足條件則返回"真"
    |

    集合運算符,返回兩個集合的聯合

    二、 腳本與XSL的結合及應用

    <xsl:eval>含義:計算腳本表達式,輸出一個文本字符串。
    語法:
    <xsl:eval language="language-name">
      屬性:
      language ── 規定所用腳本語言的名字,可用的屬性有"JavaScript"、"JScript"、"VBScript"、"VBS"等,缺省為"JScript"。

    <xsl:script>含義:聲明全局變量或定義函數。
      語法:
    <xsl:script language="language-name">
      屬性:同<xsl:eval>

    例如:
    <TR><TD>小計</TD>
    <TD><xsl:eval>total(this,"q1")</xsl:eval></TD>
    <TD><xsl:eval>total(this,"q2")</xsl:eval></TD>
    <TD><xsl:eval>total(this,"q3")</xsl:eval></TD>
    <TD><xsl:eval>total(this,"q4")</xsl:eval></TD>
    </TR>
    </TABLE>

    <xsl:script>
    function total(node,q)
    {
      temp=0;
      mark='/document/report/'+q;
      v=node.selectNodes(mark);
      for(t=v.nextNode();t;t=v.nextNode())
      {
        temp+=Number(t.text);
      }
      return temp; //小計值
    }
    </xsl:script>
    selectNodes() ── 是XMLDOMObject的一個方法,返回文檔中所有滿足條件的結點的集合,條件與< xsl:for-each >和select屬性的取值采用同樣的寫法,可以加篩選、下標等限制。


    三、XSL函數

            1、end()
      含義:返回集合中最后一個元素。

           2、index()
      含義:返回該元素在集合中的位置,返回值是一整數,其中第一個元素返回0。

             3、nodeName()
      含義:返回元素的名字,即標記名。
      示例:選擇任意元素,假如其名字(即標記名)等于"name":
           *[nodeName()='name'] 或 *[name]

              4、number()
            
    含義:將值轉換為數值形式,如果不是數值則返回空,要求參數。
      示例:年齡(age)小于30歲的人的簡歷(resume):
            resume[number(age)$lt$30] 或 resume[age$lt$30]

            5、nodeType()
          
    含義:返回結點類型,結果為是數值。以下是返回值列表:

     結點類型  結點類型值  結點的字符形式描述
     Element  1  'element'
     Element Attribute  2  'attribute'
     Markup-Delimited Region of Text  3  'text'
     Processing Instruction  7  'processing_instruction'
     Comment  8  'comment'
     Document Entity  9  'document'

      6、value()
            含義:返回元素或屬性的值。
            示例:value()是元素或屬性的缺省方法,以下表示是等價:
            name!value()="NAME" 與 name="NAME"
           @attr="attribute_value" 與 @attr="attribute_value"
           注:@是屬性前綴,@attr表示是屬性attr

      7、attribute()
      含義:返回所有屬性結點的集合,等價于"@*"。
            示例:尋找所有的resume元素,滿足條件至少有一個屬性的值為"ABC":
             resume[$any$attribute()='ABC'] 或 resume[$any$@*='ABC']
            尋找所有的resume元素,滿足條件至少有一個子元素有一個屬性的值為"ABC":
            resume[$any$*/attribute()='ABC'] 或 resume[$any$*/@*='ABC']

           8、comment()
           含義:返回所有注釋結點。
           示例:
          resume[$any$comment()='禹希初的簡歷']
          表示尋找含有注釋語句:<!--禹希初的簡歷-->的<resume>元素。

           9、cdata()
          含義:返回所有CDATA類型的結點的集合。
          示例:resume[$any$cdata()='禹希初的簡歷']
          表示尋找含有下述語句(必須是直接子結點)<![CDATA[禹希初的簡歷]]>的<resume>元   素。

           10、node()
           含義:返回當前上下文環境中除根結點和屬性結點以外的所有結點的集合,等價于:
           "*|pi()|comment()|text()"

      示例:尋找所有元素resume,其最后一個結點的名字為"skill":
            resume[node()[end()]!nodeName()='skill']
            尋找所有resume元素的第一個結點:resume/node()[0]。

      11、textnode()
           含義:返回所有文本類型的結點的集合。
           示例:尋找每一個p元素的第二個文本結點:p/textnode(1) 或 p!textnode(1)

      12、text()
           含義:返回所有表示文本字符串的結點的集合,等價于"cdata()|textnode()"。

    13、absoluteChildNumber
      含義:返回結點相對于它所有的兄弟(不論名字是否相同)的序號。
      語法:absoluteChildNumber(node)
      參數:node ── 對象,欲返回編號的結點。
      示例:
      1、假定文檔結構為:<document><head/><body/></document>,其中document為頂層結點,下述表達式將輸出:
      <xsl:eval>
      absoluteChildNumber(this.selectNodes('/document/body').item(0))
      </xsl:eval>
      2、確定當前結點相對于其所有兄弟的序號:
      <xsl:eval>
      absoluteChildNumber(this)
      </xsl:eval>

    14、ancestorChildNumber
      含義:從給定結點出發根據給定祖先結點名返回最近的祖先結點的序號(相對于同名結點)。如果找不祖先,則返回0。
      語法:ancestorChildNumber(bstrNodeName, pNode)
      參數:
      bstrNodeName ── 字符串。被搜索的祖先結點的名字。
      pNode ── 對象。搜索開始位置的結點。
      示例查找當前結點最近的名為report祖先結點:
      ancestorChildNumber('report',this)

    15、attributes
      含義:返回結點屬性的集合。
      語法:object.attributes
      參數:object ── 結點對象。
      示例:當前結點屬性的個數
      this.attributes.length
      當前結點第三個屬性的值this.attributs.item(2).value或this.attributes.item(2).text或this.attributes(2).text
      注意:如果給定的下標大于屬性總和減1將出錯,第一個屬性的下標是0。

    16、baseName
      含義:返回有名字空間限制的基本名,即不包括名字前綴。
      語法:object.baseName
      參數:object ── 結點對象
      示例,當前結點的基本名:this.baseName

    17、childNumber
      含義:返回結點相對于同名同胞的序號。
      語法:childNumber(object)
      參數:object ── 結點對象
      示例,假定XML文檔結構如下:<x><y><z></z></y></x>
      如果當前結點是z,則childNumber(this)返回1,而absoluteChildNumber(this)返回3。

    18、dataType
      含義:設定或讀取結點的數據類型。
      語法:設定結點的數據類型 object.dataType=objValue
         讀取結點的數據類型 objValue=object.dataType
      參數:object ── 結點對象。
      示例,讀取當前結點的數據類型:dtType=this.dataType

    19、depth
      含義:指定結點出現在文檔樹上的深度,即該結點位于文檔第幾層,頂層結點位于第一層,根結點(即用"/"表示的結點)位于第0層。
      語法:depth(pNode)
      參數:pNode ── 結點對象
      示例,當前結點的深度:depth(this)

    20、firstChild、lastChild
      含義:返回結點的第一個子結點(或最后一個子結點)。
      語法:pNode.firstChild
         pNode.lastChild
      參數:pNode ── 結點對象
      示例,當前結點的第一個結點的名字:this.firstChild.nodeName

    21、formatIndex
      含義:用指定的計數系統格式化提供的整數。
      語法:formatIndex(lIndex, bstrFormat)
      參數:
      lIndex ── 整型數值或變量
      bstrFormat ── 數據格式,可選值有a、A、i、I、1、01(以0打頭的數值形式,如果要求固定長度的編號如0001、0002則非常有用)。
      示例,當前結點的大寫羅馬數字編號:formatIndex(childNumber(this),'I')

    22、formatNumber
      含義:以指定格式輸出數值。
      語法:formatNumber(dblNumber, bstrFormat)
      參數:說明同formatNumber,不同之處在于格式化的可以是小數。
      示例,對變量a的值格式化為兩位小數:formatNumber(a,'#.00'):

    23、hasChildNodes
      含義:如果結點有子結點則返回true(-1),否則為false(0)。
      語法:pNode.hasChildNodes()
      注意:與此前介紹的函數不同,此函數后必須帶一個空括號。
      示例,判斷當前結點是否有子結點:this.hasChildNodes

    24、namespaceURI、prefix
      含義:返回結點名字空間的全局資源標識符(或前綴)。
      語法:pNode.namespaceURI     pNode.prifix

    25、nextSibling、previousSibling、parentNode
      含義:返回結點的下一個兄弟(或前一個兄弟、或結點的父結點)。
      語法:pNode.nextSibling  pNode.previousSibling  pNode.parentNode
       注意:對根結點(即"/")應用parentNode方法、對第一個孩子結點應用previousSibling方法、對最后一個孩子結點應用 nextSibling方法均會導致錯誤,可通過此過關系運算符==(等于)和!=(不等于)來判斷一個結點是否某一指定結點,格式為pNode1 = pNode2或pNode2 != pNode2。
      十四、nodeName
      含義:返回元素、屬性、入口的名字或其他類型結點的一個特定字符串。
      語法:pNode.nodeName
      示例,當前結點的名字:this.nodeName

    26、nodeType、NodeTypeString
      含義:返回結點的類型的數值形式(或字符串形式)。
      語法:pNode.nodeType 或 pNode.nodeTypeString
      返回值:
      結點類型             結點類型值        結點的字符形式描述
      Element                   1               'element'
      Element Attribute         2               'attribute'
      Markup-Delimited      3
      Region of Text                'text'
      Processing Instruction    7           'processing_instruction'
      Comment                   8                'comment'
      Document Entity           9                'document'

    27、nodeTypedValue
      含義:以結點預定義的數據類型返回結點的值。
      語法:pNode.nodeTypedValue
      示例,假定當前結點的數據類型是fixed.14.4,下例將以數值返回結點的值,而不是文本一個字符串:
      this.nodeTypedValue

    28、nodeValue
      含義:返回結點的文本。
      語法:pNode.nodeValue
      注意:該方法不用于元素類結點,可用于屬性、CDATA、注釋、文本等結點。
      示例,當前元素第一個屬性的值:this.attributes(0).nodeValue
      當前元素內的文本(假定該元素內只有文本,無其它元素,即<mark>text</mark>,建議多嘗幾次掌握其確切的用法)。
      this.firstChild.nodeValue

    29、ownerDocument
      含義:返回包含該結點的文檔的根。
      語法:pNode.ownerDocument
      注意:該方法用于文檔的根結點將出錯。

    30、selectNodes
      含義:給定的樣式匹配應用于當前結點并返回匹配的結點集合。
      語法:pNode.selectNodes('pattern')
       提示:pattern的編寫與<xsl:for-each>的select屬性的值類似,其中以"/"開頭表示從文檔的根出發搜索;以 "http://"開頭表遍歷文檔的所有結點;以".."開頭表示從當前結點的父結點開始;如果欲從當前結點向下搜索則不能有以上特殊字符打頭。
      示例,與當前結點同名的元素在其父元素內的個數:
      childNumber(this.selectNodes("../"+this.nodeName+"[end()]").item(0))
      當前元素內名字為"skill"的元素的個數:
      childNumber(this.selectNodes("skill[end()]").item(0))

    31、selectSingleNode
      含義:與selectNodes類似,不同的只返回匹配的第一個結點、而不是結點集合。
      語法:pNode.selectSingleNode('pattern')
      示例,與當前結點同名的元素在其父元素內的個數:
         childNumber(this.selectSingleNode("../"+this.nodeName+"[end()]"))
      當前元素內名字為"skill"的元素的個數:
       childNumber(this.selectSingleNode("skill[end()]"))

    32、text
      含義:返回結點與它的子樹內的文字內容。
      語法:pNode.text
      示例,整個文檔內的文字內容:this.ownerDocument.text
      當前元素及其子樹的文字內容:this.text

    33、xml
      含義:返回結點及其后代的XML表示。
      語法:pNode.xml
      示例,當前文檔的XML內容:this.ownerDocument.xml
      另有幾個函數不作介紹,列于其下以供參考,如感興趣,請訪問http://msdn.microsoft.com獲取詳細說明。

       formatTime(varTime, bstrFormat,varDestLocale)
       formatDate(varDate, bstrFormat,varDestLocale)
       apendChild(newChild)
       definition
       CloneNode
       insertBefore(newChild, refChild)
       parsed
       removeChild(oldChild)
       replaceChild(newChild, oldChild)
       specified
       transformNode(stylesheet)
       transformNodeToObject(stylesheet,outputObject)
       uniqueID(pNode)

    posted on 2006-02-13 21:33 Vincent.Chen 閱讀(201) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 在线免费观看伊人三级电影| 春意影院午夜爽爽爽免费| 99热这里有免费国产精品| 亚洲日本乱码在线观看| 亚洲五月午夜免费在线视频| 亚洲天堂在线视频| 国产精品综合专区中文字幕免费播放| 国产免费资源高清小视频在线观看| 亚洲综合色丁香婷婷六月图片| 在线免费观看污网站| 久久久亚洲精华液精华液精华液| 国产又大又黑又粗免费视频| 国产精品亚洲二区在线| 免费一级e一片在线播放| 成人精品国产亚洲欧洲| 亚洲毛片av日韩av无码| 日本三级在线观看免费| 久久亚洲免费视频| 免费大片黄在线观看yw| 亚洲а∨精品天堂在线| 国产亚洲美日韩AV中文字幕无码成人| 99热在线日韩精品免费| 亚洲精品一区二区三区四区乱码| 成人免费视频小说| 国产精品免费大片一区二区| 亚洲伊人久久大香线蕉苏妲己| 久久笫一福利免费导航| 色窝窝亚洲av网| 亚洲欧洲美洲无码精品VA| 最近中文字幕2019高清免费| 亚洲色欲啪啪久久WWW综合网| 亚洲福利精品电影在线观看| 男人j进入女人j内部免费网站 | 含羞草国产亚洲精品岁国产精品| 亚洲成a人片在线观看老师| 久久国产精品萌白酱免费| 中文字幕在线日亚洲9| 亚洲人成影院在线观看| 亚洲精品视频在线观看免费| 日韩国产精品亚洲а∨天堂免| 亚洲综合国产一区二区三区|