?? 0403-0400.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0403-0400 -->
<HTML><HEAD><TITLE>XML中國論壇 - 初學進階 - 4.3.4 XSLT句法與函數</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TABLE {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"
}
.pt9 {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"
}
.pt10 {
FONT-WEIGHT: 700; FONT-SIZE: 10pt; LINE-HEIGHT: 18pt; FONT-FAMILY: "宋體"
}
.TempOutline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; COLOR: #666666; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.TempOutline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; COLOR: #666666; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage0 {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage111 {
FONT-SIZE: 9pt; MARGIN-LEFT: 51pt; TEXT-INDENT: -64pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
</STYLE>
<META content="Microsoft FrontPage 5.0" name=GENERATOR></HEAD>
<BODY vLink=#000000 aLink=#000000 link=#000000 leftMargin=0 topMargin=0
onload=""><!-- 以下為主體內容 -->
<div align="center">
<center>
<TABLE width="100%" border=0 style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<TBODY>
<TR vAlign=top>
<TD width=47 rowSpan=2></TD>
<TD vAlign=center width="535" >
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=44 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="535" ><!-- 正文內容 -->
<DIV class=pt10><B>4.3.4 XSLT句法與函數</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>從前面的例子中,相信讀者已經大概了解了XSLT的一般形態及功能。在這一小節里,我們再來綜合地論述一下。
<OL>
<LI><STRONG>文檔結構</STRONG> </LI></OL>
<P>前面說過,XSLT文檔本身是XML文檔,因此文檔的第一句自然是:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version="1.0"
?></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>接下來是樣式單部分:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><BR>…
…<BR></xsl:stylesheet></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>也可以寫作:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><BR>…
…<BR></xsl:transform></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>xsl:transform與xsl:stylesheet具有相同的含義,都表示元素所包含的內容為樣式單。xsl:stylesheet元素必須包含有"version"屬性,用以指示該XSL文檔遵從哪一個版本的XSL標準。另外,xmlns:xsl指示了XSL的命名空間,在XSLT標準中,定義了XSLT的命名空間為http://www.w3.org/1999/XSL/Transform。</P>
<P>XSLT在進行轉換時,首先遍歷XML源文檔樹,找到要處理的節點,然后將定義好的模板信息施加到該節點中。
<OL>
<LI type=disc value=2><STRONG>模板及應用</STRONG> </LI></OL>
<P>xsl:template是模板元素,通常每個xsl:template有一個節點匹配屬性,由"match="指定。在對模板進行匹配時使用"xsl:apply-templates",選擇要匹配的模板,相當于一個調用的過程。對節點的匹配規則遵照XPath。</P>
<P>不同的模板設計,可以導致同一個文檔有不同的輸出效果。xsl:template元素有一個mode屬性,可以根據需要去匹配不同模式的模板。若將前例作如下修改:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><xsl:template match="/" mode="blue">
<BR> …<BR><TITLE>學生花名冊</TITLE>
<BR><STYLE> .title{font-size:15pt; font-weight:bold;
color:blue }<BR>…
<P><xsl:template match="/" mode="red"> <BR>
…<BR><TITLE>學生花名冊</TITLE> <BR><STYLE>
.title{font-size:15pt; font-weight:bold; color:red
}<BR>…</P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>如果要將TITLE輸出為藍色,則用下面語句匹配:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><xsl:apply-templates select="/"
mode="blue"/></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>如果要將title輸出為紅色,則寫為:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><xsl:apply-templates select="/"
mode="red"/></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>此外,模板總是與節點相對應的,一個節點可能對應于不同的模板,那么如何確定各模板匹配的先后次序呢?XSLT中可為xsl:template設置優先級,寫法是:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><xsl:template match="student" priority="n">
//n為優先級數</TD></TR></TBODY></TABLE></CENTER></DIV>
<OL start=3>
<LI><STRONG>計算節點值</STRONG> </LI></OL>
<P>在使用XSLT進行轉換時,常常需要獲取節點值,使用xsl:value-of元素可達到這個目的,如下例:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><xsl:value-of
select="origin"/></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>得到的是學生原籍的值,select屬性指定要獲取的是哪一個節點的節點值。
<OL start=4>
<LI><STRONG>循環處理</STRONG> </LI></OL>
<P>使用xsl:for-each可對所選節點依次進行處理,如例中在生成表格處理中,就是利用循環將各個學生的信息取出放入表格中的,寫法是:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><xsl:for-each select="student"
order-by="name">
…</xsl:for-each></TD></TR></TBODY></TABLE></CENTER></DIV>
<OL start=5>
<LI><STRONG>排序</STRONG> </LI></OL>
<P>對于用xsl:for-each或xsl:apply-templates匹配的節點,可使用xsl:sort將所選節點內容進行排序,如:</P>
<DIV align=center>
<CENTER>
<TABLE width="90%" border=1>
<TBODY>
<TR>
<TD align=middle width="20%"><STRONG>排序方式</STRONG></TD>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -