posts - 61,  comments - 2033,  trackbacks - 0

          一、XSL的運算符

          表一、運算符與特殊字符

           運算符 描述
          /
          選擇子元素,返回左側(cè)元素的直接子元素;如果"/"位于最左側(cè)表示選擇根結(jié)點的直接子元素
          //
          遞歸下降,不論深度,搜索指定的元素;如果位于最左側(cè)表示從根結(jié)點出發(fā)遞歸下降搜索指定元素
          .
          表示當(dāng)前元素
          *
          通配符,選擇任意元素,不考慮名字
          @

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

          @*

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

          :
          名字作用范圍分隔符,將名字作用范圍前綴與元素或?qū)傩悦指糸_來
          !*
          在相關(guān)節(jié)點上應(yīng)用指定方法
          ()*
          分組,明確指定優(yōu)先順序
          []
          應(yīng)用過濾樣式
          []*
          下標(biāo)運算符,用于在集合中指示元素

            表二、邏輯運算符

           可選方式 描述
          and $and$ 或 &&
          邏輯與
          or $or$ 或 ||
          邏輯或
          not() $not$
          邏輯非

            表三、關(guān)系運算符

           可選方式 描述
          = 或 $eq$
          相等
          = 或 $ieq$
          相等(不區(qū)分大小寫)
          != 或 $ne$
          不等
          $ine$
          不等(不區(qū)分大小寫)
          < 或 $lt$
          小于
          $ilt$
          小于(不區(qū)分大小寫)
          <= 或 $le$
          小于等于
          $ile$
          小于等于(不區(qū)分大小寫)
          > 或 $gt$
          大于
          $igt$
          大于(不區(qū)分大小寫)
          >= 或 $ge$
          大于等于
          $ige$
          大于等于(不區(qū)分大小寫)
          $all$
          集合運算符,如果集合中所有項目均滿足條件則返回"真"
          $any$
          集合運算符,如果集合中任意項目滿足條件則返回"真"
          |
          集合運算符,返回兩個集合的聯(lián)合

          二、 腳本與XSL的結(jié)合及應(yīng)用

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

          <xsl:script>含義:聲明全局變量或定義函數(shù)。
            語法:
          <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的一個方法,返回文檔中所有滿足條件的結(jié)點的集合,條件與< xsl:for-each >和select屬性的取值采用同樣的寫法,可以加篩選、下標(biāo)等限制。


          三、XSL函數(shù)

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

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

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

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

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

           結(jié)點類型  結(jié)點類型值  結(jié)點的字符形式描述
           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()
                  含義:返回元素或?qū)傩缘闹怠?BR>        示例:value()是元素或?qū)傩缘娜笔》椒ǎ韵卤硎臼堑葍r:
                  name!value()="NAME" 與 name="NAME"
                 @attr="attribute_value" 與 @attr="attribute_value"
                 注:@是屬性前綴,@attr表示是屬性attr

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

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

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

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

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

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

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

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

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

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

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

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

          18、dataType
            含義:設(shè)定或讀取結(jié)點的數(shù)據(jù)類型。
            語法:設(shè)定結(jié)點的數(shù)據(jù)類型 object.dataType=objValue
               讀取結(jié)點的數(shù)據(jù)類型 objValue=object.dataType
            參數(shù):object ── 結(jié)點對象。
            示例,讀取當(dāng)前結(jié)點的數(shù)據(jù)類型:dtType=this.dataType

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

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

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

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

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

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

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

          26、nodeType、NodeTypeString
            含義:返回結(jié)點的類型的數(shù)值形式(或字符串形式)。
            語法:pNode.nodeType 或 pNode.nodeTypeString
            返回值:
            結(jié)點類型             結(jié)點類型值        結(jié)點的字符形式描述
            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
            含義:以結(jié)點預(yù)定義的數(shù)據(jù)類型返回結(jié)點的值。
            語法:pNode.nodeTypedValue
            示例,假定當(dāng)前結(jié)點的數(shù)據(jù)類型是fixed.14.4,下例將以數(shù)值返回結(jié)點的值,而不是文本一個字符串:
            this.nodeTypedValue

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

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

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

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

          32、text
            含義:返回結(jié)點與它的子樹內(nèi)的文字內(nèi)容。
            語法:pNode.text
            示例,整個文檔內(nèi)的文字內(nèi)容:this.ownerDocument.text
            當(dāng)前元素及其子樹的文字內(nèi)容:this.text

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

             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 2005-11-16 16:44 魚上游 閱讀(820) 評論(2)  編輯  收藏 所屬分類: 爪哇友鄰真不少


          FeedBack:
          # re: XSL 學(xué)習(xí)筆記 —— 中級篇
          2006-08-02 13:22 | zers
          怎么我在XSL用不了 haschildnodes()這個函數(shù)的?說這不是XSL的函數(shù)  回復(fù)  更多評論
            
          <2005年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          常用鏈接

          留言簿(82)

          隨筆分類(59)

          文章分類(21)

          相冊

          收藏夾(40)

          GoodSites

          搜索

          •  

          積分與排名

          • 積分 - 1267735
          • 排名 - 22

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 迭部县| 延边| 嘉峪关市| 吴川市| 聂荣县| 忻城县| 常熟市| 信丰县| 康乐县| 元朗区| 金阳县| 贵德县| 威海市| 思茅市| 鹿泉市| 卢氏县| 仁化县| 申扎县| 贡嘎县| 绥宁县| 弋阳县| 根河市| 孟连| 礼泉县| 乳山市| 白沙| 永靖县| 华安县| 巴林右旗| 高雄市| 利辛县| 垫江县| 磐石市| 来凤县| 多伦县| 平湖市| 上虞市| 蓝山县| 辰溪县| 炉霍县| 英吉沙县|