XSL語言的三種模式

xsl 中if的用法

<select class="form-control input-sm" name="store_id">

<xsl:for-each select="/html/Body/fhck/type/ul/li">

        <xsl:element name="OPTION">

 <xsl:attribute name="value"><xsl:value-of select="value" /></xsl:attribute>

<xsl:if test="status = 'Y'">

<xsl:attribute name="checked">true</xsl:attribute>

</xsl:if>

<xsl:value-of select="text" />

</xsl:element>

</xsl:for-each>

</select>


<div class="form-group">

        <label>手機號碼:</label>

<xsl:element name="INPUT">

    <xsl:attribute name="type">text</xsl:attribute>

    <xsl:attribute name="name">mobile</xsl:attribute>

            <xsl:attribute name="placeholder">必填</xsl:attribute>

    <xsl:attribute name="data-toggle">tooltip</xsl:attribute>

    <xsl:attribute name="data-placement">bottom</xsl:attribute>

    <xsl:attribute name="data-original-title">手機和固話選填一個</xsl:attribute>

    <xsl:attribute name="class">form-control input-sm</xsl:attribute>

</xsl:element>

</div>






XSL語言的三種模式:

選擇模式:<xsl:for-each>、<xsl:value-of>和 <xsl:apply-templates>

<xsl:for-each> 選擇節點

語法:<xsl:for-each select="pattern"  order-by="sort-criteria-list">

屬性:

1. select:選擇器。XML文檔中需要選擇出來的節點,可以是節點與子節點的結合,   表示方式節點/子節點。

2. Order-by:排序列表。以分號(;)分隔、作爲排序標準的列表。在列表元素前添加加號(+)表示按此標記的內容以升序排序,添加減號(-)表示逆序排序。作爲一種簡化的表示就是,排序標準列表就是由select規定的標記的子標記的序列,每個標記之間以(;)分隔。

<xsl:value-of> 提前節點的值

語法:<xsl:value-of select="pattern">

屬性:select用來與當前上下文匹配的XSL式樣。

<xsl:apply-templates>

語法:<xsl:template match="node-context" language="language-name">

屬性:match ─ 確定什麼樣的情況下執行此模板。作爲一種簡化的說明,在此處使用標記的名字;其中最上層模板必須將match設爲"/"。

      language ─ 確定在此模板中執行什麼腳本語言,其取值與HTML中的SCRIPT標記的LANGUAGE屬性的取值相同,缺省值是Jscript。

 

語法:<xsl:apply-templates select="pattern" order-by="sort-criteria-list">

屬性:select ─確定在此上下文環境中應執行什麼模板,即選取用< xsl:template >標記建立的模板(塊)。

      order-by ─以分號(;)分隔的排序標準,通常是子標記的序列。

 

測試模式:<xsl:if>和<xsl:when>

<xsl:if>

語法:<xsl:if expr="script-expression" language="language-name" test="pattern">

屬性:expr ─ 腳本語言表達式,計算結果爲"真"或"假";如果結果爲"真",且通過test,則在輸出中顯示其中內容(可省略此項屬性)。

       language ─ expr屬性中表達式的腳本語言類型,其取值與HTML標記SCRIPT的LANGUAGE屬性的取值相同,缺省爲"JScript"。

   test ─源數據測試條件。

例子:test=".[value()$le$20]"

解釋:$le$─是關係運算符中的"小於等於",其它關係有小於($lt$)、大於($gt$)、大於等於($ge$)、等於($eq$)、不等於($ne$)等。

            . ─表示引用當前標記。

            [ ] ─表示篩選,只有滿足篩選條件的標記才能被選取。

            value() ─XSL函數,其他常用XSL函數有text()、end()、index()等。

<xsl:when>

語法:<xsl:choose>

屬性:無,表示一個或者多個篩選的開始。

 

語法:<xsl:when expr="script-expression" language="language-name" test="pattern">

屬性:expr ── 腳本語言表達式,計算結果爲"真"或"假";如果結果爲"真",且通過test,則在輸出中顯示其中內容(可省略此項屬性)。

  language ── expr屬性中表達式的腳本語言類型,其取值與HTML標記SCRIPT的LANGUAGE屬性的取值相同,缺省爲"JScript"。

  test ── 源數據測試條件。

 

語法:<xsl:otherwise>

屬性:無,在一個多選測試中,如果沒有不滿足<xsl:when>規定的條件,如果在最後有此標記,則輸出此標記中的內容。

 

匹配模式:<xsl:template>

 

 

表一、運算符與特殊字符

 運算符

 

描述

/

 

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

//

 

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

.

 

表示當前元素

*

 

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

@

 

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

@*

 

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

:

 

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

!*

 

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

()*

 

分組,明確指定優先順序

[]

 

應用過濾樣式

[]*

 

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

  表二、邏輯運算符

 可選方式

 

描述

and $and$ 或 &&

 

邏輯與

or $or$ 或 ||

 

邏輯或

not() $not$

 

邏輯非

  表三、關係運算符

 可選方式

 

描述

= 或 $eq$

 

相等

= 或 $ieq$

 

相等(不區分大小寫)

!= 或 $ne$

 

不等

$ine$

 

不等(不區分大小寫)

< 或 $lt$

 

小於

$ilt$

 

小於(不區分大小寫)

<= 或 $le$

 

小於等於

$ile$

 

小於等於(不區分大小寫)

> 或 $gt$

 

大於

$igt$

 

大於(不區分大小寫)

>= 或 $ge$

 

大於等於

$ige$

 

大於等於(不區分大小寫)

$all$

 

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

$any$

 

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

|

 

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

 

本期介紹多個XSL對於VBScript、JScript增加的方法、屬性,以充分發揮XML的優勢,用於<xsl:script>、<xsl:eval>標記內表達式的編寫或<xsl:if>、<xsl:when>的expr屬性。

  一、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>

  二、ancestorChildNumber

  含義:從給定結點出髮根據給定祖先結點名返回最近的祖先結點的序號(相對於同名結點)。如果找不祖先,則返回0。

  語法:ancestorChildNumber(bstrNodeName, pNode)

  參數:

  bstrNodeName ── 字符串。被搜索的祖先結點的名字。

  pNode ── 對象。搜索開始位置的結點。

  示例查找當前結點最近的名爲report祖先結點:

ancestorChildNumber('report',this)

  三、attributes

  含義:返回結點屬性的集合。

  語法:object.attributes

  參數:object ── 結點對象。

  示例:當前結點屬性的個數

this.attributes.length

  當前結點第三個屬性的值

this.attributs.item(2).value



this.attributes.item(2).text



this.attributes(2).text

  注意:如果給定的下標大於屬性總和減1將出錯,第一個屬性的下標是0。

  四、baseName

  含義:返回有名字空間限制的基本名,即不包括名字前綴。

  語法:object.baseName

  參數:object ── 結點對象

  示例,當前結點的基本名:

this.baseName

  五、childNumber

  含義:返回結點相對於同名同胞的序號。

  語法:childNumber(object)

  參數:object ── 結點對象

  示例,假定XML文檔結構如下:

<x><y><z></z></y></x>

  如果當前結點是z,則childNumber(this)返回1,而absoluteChildNumber(this)返回3。

  六、dataType

  含義:設定或讀取結點的數據類型。

  語法:設定結點的數據類型 object.dataType=objValue
     讀取結點的數據類型 objValue=object.dataType

  參數:object ── 結點對象。

  示例,讀取當前結點的數據類型:

dtType=this.dataType

  七、depth

  含義:指定結點出現在文檔樹上的深度,即該結點位於文檔第幾層,頂層結點位於第一層,根結點(即用"/"表示的結點)位於第0層。

  語法:depth(pNode)

  參數:pNode ── 結點對象

  示例,當前結點的深度:

depth(this)

  八、firstChild、lastChild

  含義:返回結點的第一個子結點(或最後一個子結點)。

  語法:pNode.firstChild
     pNode.lastChild

  參數:pNode ── 結點對象

  示例,當前結點的第一個結點的名字:

this.firstChild.nodeName

  九、formatIndex

  含義:用指定的計數系統格式化提供的整數。

  語法:formatIndex(lIndex, bstrFormat)

  參數:

  lIndex ── 整型數值或變量

  bstrFormat ── 數據格式,可選值有a、A、i、I、1、01(以0打頭的數值形式,如果要求固定長度的編號如0001、0002則非常有用)。

  示例,當前結點的大寫羅馬數字編號:

formatIndex(childNumber(this),'I')

  十、formatNumber

  含義:以指定格式輸出數值。

  語法:formatNumber(dblNumber, bstrFormat)

  參數:說明同formatNumber,不同之處在於格式化的可以是小數。

  示例,對變量a的值格式化爲兩位小數:

formatNumber(a,'#.00'):

  十一、hasChildNodes

  含義:如果結點有子結點則返回true(-1),否則爲false(0)。

  語法:pNode.hasChildNodes()

  注意:與此前介紹的函數不同,此函數後必須帶一個空括號。

  示例,判斷當前結點是否有子結點:

this.hasChildNodes

  十二、namespaceURI、prefix

  含義:返回結點名字空間的全局資源標識符(或前綴)。

  語法:pNode.namespaceURI
     pNode.prifix

  十三、nextSibling、previousSibling、parentNode

  含義:返回結點的下一個兄弟(或前一個兄弟、或結點的父結點)。

  語法:pNode.nextSibling
     pNode.previousSibling
     pNode.parentNode

  注意:對根結點(即"/")應用parentNode方法、對第一個孩子結點應用previousSibling方法、對最後一個孩子結點應用nextSibling方法均會導致錯誤,可通過此過關係運算符==(等於)和!=(不等於)來判斷一個結點是否某一指定結點,格式爲pNode1 = pNode2或pNode2 != pNode2。

  十四、nodeName

  含義:返回元素、屬性、入口的名字或其他類型結點的一個特定字符串。

  語法:pNode.nodeName

  示例,當前結點的名字:

this.nodeName

  十五、nodeType、NodeTypeString

  含義:返回結點的類型的數值形式(或字符串形式)。

  語法:pNode.nodeType 或 pNode.nodeTypeString

  返回值:

 結點類型

 結點類型值

 結點的字符形式描述

 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'

  十六、nodeTypedValue

  含義:以結點預定義的數據類型返回結點的值。

  語法:pNode.nodeTypedValue

  示例,假定當前結點的數據類型是fixed.14.4,下例將以數值返回結點的值,而不是文本一個字符串:

this.nodeTypedValue

  十七、nodeValue

  含義:返回結點的文本。

  語法:pNode.nodeValue

  注意:該方法不用於元素類結點,可用於屬性、CDATA、註釋、文本等結點。

  示例,當前元素第一個屬性的值:

this.attributes(0).nodeValue

  當前元素內的文本(假定該元素內只有文本,無其它元素,即<mark>text</mark>,建議多嘗幾次掌握其確切的用法)。

this.firstChild.nodeValue

  十八、ownerDocument

  含義:返回包含該結點的文檔的根。

  語法:pNode.ownerDocument

  注意:該方法用於文檔的根結點將出錯。

  十九、selectNodes

  含義:給定的樣式匹配應用於當前結點並返回匹配的結點集合。

  語法:pNode.selectNodes('pattern')

  提示:pattern的編寫與<xsl:for-each>的select屬性的值類似,其中以"/"開頭表示從文檔的根出發搜索;以"//"開頭表遍歷文檔的所有結點;以".."開頭表示從當前結點的父結點開始;如果欲從當前結點向下搜索則不能有以上特殊字符打頭。

  示例,與當前結點同名的元素在其父元素內的個數:

childNumber(this.selectNodes("../"+this.nodeName+"[end()]").item(0))

  當前元素內名字爲"skill"的元素的個數:

childNumber(this.selectNodes("skill[end()]").item(0))

  二十、selectSingleNode

  含義:與selectNodes類似,不同的只返回匹配的第一個結點、而不是結點集合。

  語法:pNode.selectSingleNode('pattern')

  示例,與當前結點同名的元素在其父元素內的個數:

childNumber(this.selectSingleNode("../"+this.nodeName+"[end()]"))

  當前元素內名字爲"skill"的元素的個數:

childNumber(this.selectSingleNode("skill[end()]"))

  二十一、text

  含義:返回結點與它的子樹內的文字內容。

  語法:pNode.text

  示例,整個文檔內的文字內容:

this.ownerDocument.text

  當前元素及其子樹的文字內容:

this.text

  二十二、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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章