UTF.COM.CN

xsl遞增變量解決家族樹的問題

作者︰佚名 | 來源︰網絡 | 添加時間︰2006-05-10 16:46:19 | 人氣︰1193

xsl遞增變量解決家族樹的問題

xml沒有遞增變量的標準方法一旦定義了一個變量,他就不能改變
這相當于java中的final字段不過在一些情況中結合模板的遞歸方法可以實現類
似的結果
假如xml文件為familyTree.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="familyTree.xslt"?>
<person name="Otto">
<person name="Sandra">
<person name="Lichao">
<person name="Zhangsan"/>
</person>
<person name="Eric">
<person name="HaLi"/>
</person>
<person name="Lisi">
<person name="HeLi"/>
<person name="Andy"/>
</person>
</person>
</person>
這段xml中每個<person>元素可以包含任意個數的<person>子元素
這就叫家族數,在顯示這個家族樹的時候應根據家族系來縮進文本是個恰當的
做法這就給人們之間關系給一個可視化的表示
例如
Otto
Sandra
Lichao
Zhangsan
Eric
HaLi
Lisi
HeLi
Andy
這樣就得用遞歸的方法寫xslt樣式表
familyTree.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<!-- select the top level person -->
<xsl:apply-templates select="person">
<xsl:with-param name="level"
select="'0'"/>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<!-- Output information for a person and recursively select
all children. -->
<xsl:template match="person">
<xsl:param name="level"/>

<!-- indent according to the level -->
<div style="text-indent:{$level}em">
<xsl:value-of select="@name"/>
</div>
<!-- recursively select children, incrementing the
level -->
<xsl:apply-templates select="person">
<xsl:with-param name="level" select="$level +
1"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
和通常一樣這個樣式表以匹配文本的根節點作為開始,並輸入一個基本的
html文檔,然後它選擇<person>根元素將level=0作為參數傳遞到匹配person的
模板︰<xsl:apply-templates select="person">
<xsl:with-param name="level" select="'0'"/>
</xsl:apply-templates>
而person模板使用一個html的div在一個新行上顯示每個人的名字並以em為單位
設定文本的縮進。最後遞歸的調用person模板,將$level+1作為參數傳遞,盡
管這樣並不會遞增一個已有的變量但是他的確傳遞了一個新的局部變量到模板
中。該變量的值大于以前的值,與遞歸的處理的技巧不同,實際上在xslt中並
沒有遞增變量值的方法
責任編輯︰冬天來了
【字號︰ 】【去論壇討論】【發表評論】【打印本文】【告訴好友】【關閉窗口
網友評論(評論內容只代表網友觀點,與本站立場無關!)

姓名︰

驗證碼︰ 點擊刷新