曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
<xsl:template match=”ATOM”>
<xsl:apply-templates
select=”MELTING_POINT”/>
</xsl:template>
<xsl:template match=”MELTING_POINT”>
<xsl:copy-of select=”..”>
<xsl:apply-templates select=”*|@*|pi()|text()”/>
</xsl:copy-of>
</xsl:template>
<xsl:template match=”* | @* | pi() | text()”>
<xsl:copy>
<xsl:apply-templates select=”* | @* | pi() | text()”/>
XML 實用大全
第 505 頁
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
這是一個從源符號集到同一個符號集的XSL 轉換的例子。不像本章中的大多數例子那樣,此例不轉換成結構整潔的HTML。
XML 實用大全
第 506 頁
14.11 使用xsl:number 為節點計數
xsl:number 在輸出文檔中插入格式化整數。由expr 特性計算出來的數值,通過四舍五入成最接近的整數,然后根據format
特性值,對此整數進行格式化,從而獲得整數值。為這兩個特性提供了恰當的缺省值。例如,考查清單14-17 中的ATOM 元
素的樣式單。
清單14-17:為原子計數的XSL 樣式單
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
<xsl:template match="PERIODIC_TABLE">
<html>
<head><title>The Elements</title></head>
<body>
<table>
<xsl:apply-templates select="ATOM"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="ATOM">
<tr>
<td><xsl:number expr="position()"/></td>
<td><xsl:value-of select="NAME"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
XML 實用大全
第 507 頁
當此樣式單應用于清單14-1 時,輸出類似如下顯示:
<html><head><title>The
Elements</title></head><body><table><tr><td>l</td><td>Hydrogen<
/td></tr>
<tr><td>2</td><td>Helium</td></tr>
</table></body></html>
由于氫是其父元素的第一個ATOM 元素,所以其號碼為1。由于氦是其父元素的第二個ATOM 元素,所以其號碼為2。(這些
號碼對應于氫和氦的原子序數,這種對應關系是清單14-1 的副產品,而清單14-1 正是以原子序數的順序進行排列的。)
14.11.1 缺省數值
如果使用expr 特性來計算編號,那么這就是所需要的值。但是,如果省略expr 特性,那么源樹形結構中的當前節點位置就
作為編號來使用。但是,可使用下面三個特性來調整此缺省值:
• level
• count
• from
這三個特性是從以前的不支持較為復雜的表達式XSL 草案中延續下來的。如果它們完全使你混淆,那么我建議不要
去考慮它們,使用expr 來代替。
14.11.1.1 level 特性
按缺省行為,當不存在expr 特性時,xsl:number 可對源節點的同屬節點加以計數。例如,如果對ATOMIC_NUMBER 元素而不
是ATOM 元素加以編號,那么由于一個ATOM 元素絕不會有多個ATOMIC_NUMBER 子元素,所以任何一個編號都不會大于1。盡
管文檔包含多個ATOMIC_NUMBER 元素,但它們不是同屬的。
將xsl:number 的level 特性設置成any,可對與文檔中當前節點同類的所有元素加以計數。此情況不僅包括與當前規則相
匹配的元素,還包括類型與要求相一致的所有元素。例如,即使只選擇氣體的原子序數,固體和液體也仍然計數在內(即便
固體和液體沒有輸出也是如此)?纯聪旅娴倪@些規則:
<xsl:template match="ATOM">
<xsl:apply-templates select="NAME"/>
</xsl:template>
<xsl:template match="NAME">
XML 實用大全
第 508 頁
<td><xsl:number level="any"/></td>
<td><xsl:value-of select="."/></td>
</xsl:template>
由于level 設置成any,上面的規則對每個新的NAME 元素產生的輸出不是從1 開始,其輸出結果如下:
<td>l</td><td>Hydrogen</td>
<td>2</td><td>Helium</td>
如果刪除level 特性或設置成缺省的single 值,那么輸出結果如下:
<td>l</td><td>Hydrogen</td>
<td>l</td><td>Helium</td>
另一個不大有用的方法將xsl:number 的level 特性設置成multi,以便對當前節點的同屬及其祖先(但不是當前節點同屬
的子節點)加以計數。
14.11.1.2 count 特性
按缺省行為,當沒有expr 特性時,只對與當前節點元素同類的元素加以計數。但可以將xsl-number 的count 特性設置成選
擇表達式,從而指定對什么元素加以計數。例如,下面的規則對ATOM 的所有子元素進行編號:
<xsl:template match="ATOM/*">
<td><xsl:number count="*"/></td>
<td><xsl:value-of select="."/></td>
</xsl:template>
應用此規則獲得的輸出結果如下:
<td>l</td><td>Helium</td>
<td>2</td><td>He</td>
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(143)