一 . Hello world 嘗試:
=============Hello.XML:=================
<?XML version="1.0" encoding="UTF-8"?>
<?XML-stylesheet type="text/xsl" href="test.xsl"?>
<FistNode>
,World
</FistNode>
===============test.xsl:==================
<?XML version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" XMLns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<Html>
<head>
<title>First node</title>
</head>
<body>
<p>
<xsl:value-of select="/FistNode"/>
</p>
</body>
</Html>
</xsl:template>
</xsl:stylesheet>
運行結果:
Hello,World
二 . XSLT元素列表
元素名
含義
xsl:apply-imports
調用重新模板規則
xsl:apply-template
指示XSLT處理器根據每個選定節點的類型和上下文 找到合適的模板
xsl:attribute
創建一個屬性節點並將其附加到輸出元素上
xsl:attribute-set
定義命名的屬性集
xsl:call-template
按名稱調用模板
xsl:choose
提供多個與<xsl:otherwise> 元素 和 <xsl:when> 元素有關的條件測試
xsl:comment
在輸出中生成注釋
xsl:copy
將當前節點從源復制到輸出
xsl:copy-of
將子樹和結果樹片段插入結果樹
xsl:decimal-fomat
聲明一個小數格式,用於控制formate-number 函數所使用的格式模式解釋
xsl:element
在輸出中創建指定名稱的元素
xsl:fallback
調用可以 為遇到的新的元素的行為 提供合適的替代行為的 模板
xsl:for-each
重復應用模板,對接點集中的每個節點應用模板
xsl:if
允許簡單條件模板片段
xsl:import
導入另外一個xslt文件
xsl:include
包含另一個xsl文件
xsl:key
聲明一個命名的鍵,用於XPath表達式中的Key()函數
xsl:message
將文本消息發送到消息緩沖區或者對話框
xsl:namespace-alias
使用其他前綴替換 與給定命名空間關聯的前綴
xsl:number
將和格式化的數字插入結果樹
xsl:otherwise
提供多個與<xsl:choose>元素和<xsl:when>元素有關的條件測試
xsl:ouput
指定在序列化結果樹時使用的選項
xsl:param
聲明一個命名參數,在<xsl:stylesheet>元素或者<xsl:template>元素中使用.允許制定默認值
xsl:preserve-space
在文檔中保留空白
xsl:sort
指定<xsl:for-each>或者<xsl:apply-template>所選節點列表的排序條件
xsl:stylesheet
指定xslt文件的文檔元素.文檔元素包含其他XSLT元素
xsl:template
定義一個可以再次使用的模板,用於為特定類型和上下文的節點生成所需要的輸出
xsl:text
在輸出中生成文本
xsl:transform
執行與<xsl:stylesheet>相同的功能
xsl:value-of
將選定節點的值作為文本插入
xsl:variable
指定表達式中綁定的值
xsl:when
提供多個與<xsl:choose>元素和<xsl:otherwise>有關的測試條件
xsl:with-param
將參數傳遞給模板
xsl:strip-space
從文檔中刪除空白
三 xsl:template 和 xsl:apply-template
模板有2部分構成:匹配模式 和 執行.
匹配模式 指定了采用哪個模板 xsl:template
執行指定了如何輸出 xsl:apply-template
1.xsl:template語法
<xsl:template natch=pattern name=qname priority=number mode=qname>
<!—執行內容à
</xsl:template>
name:唯一的名稱,便於引用
match:原節點模式 與name 必有其一
priority :-9-9的數字
mode :允許多次處理某個元素, 每次產生不同的結果. 有match就不可以有mode.
eg:
==========test.XML=============
<?XML version="1.0" encoding="UTF-8"?>
<company>
<department>
<name language="Chinese">Tech Department</name>
<leader>Zhang San</leader>
<quantity>20</quantity>
<target>software develop</target>
</department>
<department>
<name language="Chinese">Sale Department</name>
<leader>Li Si</leader>
<quantity>20</quantity>
<target>Sale work</target>
</department>
</company>
1.匹配所有的部門
<xsl:template match=”department”></xsl:template>
2.匹配所有的領導和所有的人數元素
<xsl:template match=”leader|quantity”></xsl:template>
3.匹配所有父節點為 部門的 領導元素
<xsl:template match=”department//leader”></xsl:template>
3.匹配根節點
<xsl:template match=”/”></xsl:template>
2.xsl:apply-templates
語法:
<xsl:apply-templates select=node set-expression mode=qname></xsl:apply-templates>
用來 表示 哪個節點被模板具體處理.可以理解為 調用子函數 select用來選擇確切的節點名字. xsl:apply-templates 總是在 xsl: template中
1.模板匹配整個文檔(根節點), 具體執行時 處理根節點下的所有部門元素.
<xsl:template match=”/”>
<xsl:apply-template select=”department”/>
</xsl:template>
2.模板匹配 部門 節點. 具體執行時 部門下所有的子元素都將被處理
<xsl:template match=”para”>
<p><xsl:apply-template /></p>
</xsl:template>
四 xsl:value-of
用來將 文檔中的元素 文本 寫入到 輸出文檔中.
1. 提取出部門中每個領導人的名字
<xsl:template match=”department”>
< xsl:value-of select=”leader”/>
</xsl:template>
心得: <xsl:template match=”department”>表示一個范圍,然後value-of和apply-template明確指出到底是哪些元素
五 xsl:for-each
循環處理被選擇的元素.
1. 提取每個部門的領導人
<xsl:template match=”company”>
<xsl:selct
< xsl:value-of select=”leader”/>
</xsl:template>
六 xsl:if
語法:
<xsl:if test=布爾表達式>
templatebody
</xsl:if>
1. 檢測部門節點下的所有元素,如果有領導就將領導輸出.
<xsl:template match="department">
<xsl:if test="leader">
<p><xsl:value-of select="leader"/></p>
</xsl:if>
</xsl:template>
七 xsl:choose xsl:when xsl:otherwise
<xsl:template match="department">
<xsl:choose>
<xsl:when test="leader='Li Si'">
<p>
<font color="red">
<xsl:value-of select="leader"/>
</font>
</p>
</xsl:when>
<xsl:when test="leader">
<p>
<font color="green"></font>
</p>
</xsl:when>
<xsl:otherwise>
leader!
</xsl:otherwise>
</xsl:choose>
</xsl:template>
七 xsl:sort
<xsl:template match="company">
<p>
<xsl:apply-templates select="department">
<xsl:sort select="leader"/>
</xsl:apply-templates>
</p>
</xsl:template>
八.綜合實例:
============test.XML===============
<?XML version="1.0" encoding="UTF-8"?>
<?XML-stylesheet type="text/xsl" href="test.xsl"?>
<company>
<department>
<name language="Chinese">Tech Department</name>
<leader>Zhang San</leader>
<quantity>20</quantity>
<target>software develop</target>
</department>
<department>
<name language="Chinese">Sale Department</name>
<leader>Li Si</leader>
<quantity>20</quantity>
<target>Sale work</target>
</department>
</company>
============test.xsl:===========
<?XML version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" XMLns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<Html>
<head>
<title>First node</title>
</head>
<body>
<p>
<xsl:value-of select="/company/department"/>
</p>
<p>
<xsl:apply-templates select="company"/>
</p>
</body>
</Html>
</xsl:template>
<xsl:template match="company">
<p>
<xsl:apply-templates select="department">
<xsl:sort select="leader"/>
</xsl:apply-templates>
</p>
<xsl:for-each select="child::department">
<p><xsl:value-of select="leader"/></p>
</xsl:for-each>
</xsl:template>
<xsl:template match="department">
<xsl:choose>
<xsl:when test="leader='Li Si'">
<p>
<font color="red">
<xsl:value-of select="leader"/>
</font>
</p>
</xsl:when>
<xsl:when test="leader">
<p>
<font color="green"><xsl:value-of select="leader"/></font>
</p>
</xsl:when>
<xsl:otherwise>
leader!
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
===========運行結果==============
Tech Department Zhang San 20 software develop
Li Si
Zhang San
Zhang San
Li Si