






















1) XML可以转化文档树
2) XSLT对XML的转化过程
内建模板规则
number、boolean、string、node-set、tree
相互之间的转化
说明:
Tree很少见,只有在xsl:variable中才出现。xslt2.0已经取消该类型。另外,转化为node-set,标准xslt1.0不提供,但是扩展接口通常都是提供的。比如微软提供了msxsl:node-set。
绝对路径的写法
即XPath中直接包含的,和当前节点等同。上下文节点可以通过“.”得到。
position()可以得到上下文节点的当前值。
last()可以得到上下文节点的大小
可以修改上下文节点的xslt标签
xsl:apply-templates xsl:for-each
xsl:for-each一个常用的特色就是修改context node
参见P282
[] 里面的值是boolean类型,如果不是(数值除外)就会发生强制类型转化成boolean。
数值的特性
NameTest *
Union |
count()、local-name()、name()、position()、last()
concat()、contains()、starts-with()、string()、string-length()、substring ()、substring-after()、substring-before()、translate()
<xsl:variable name="UpCaseHttp" select="translate($ItemValue, 'htp', 'HTP')"/>
boolean()、false()、not()、true()
ceiling()、floor()、number()、round()、sum()
<xsl:template name="JSButton">
<xsl:param name="Name"/>
<xsl:param name="JS"/>
<img src="../images/empty.gif" width="5" height="1"/>
<span class="clsButtonFace">
<a onclick="javascript:{$JS};">
<xsl:value-of select="$Name"/>
</a>
</span>
</xsl:template>
<xsl:template name="ea:SaveNoNewButton">
<xsl:call-template name="JSButton">
<xsl:with-param name="Name" select="' 保存'"/>
<xsl:with-param name="JS" select="'verify("Save")'"/>
</xsl:call-template>
</xsl:template>
<xsl:apply-templates select="Ebanswers/PAGE">
<xsl:template match="PAGE">
</xsl:template>
<xsl:for-each select="$CodeTable">
<option value="{CODE_VALUE}">
<xsl:if test="CODE_VALUE = $AValue">
<xsl:attribute name="selected"/>
</xsl:if>
<xsl:value-of select="CODE_NAME"/>
</option>
</xsl:for-each>
<xsl:sort
select = string-Expression
lang = { nmtoken }
data-type = { "text" | "number" | QName }
order = { "ascending" | "descending" }
case-order = { "upper-first" | "lower-first" }
/>
紧随xsl:apply-templates或xsl:for-each
<xsl:apply-templates select="/Toolkit/tk:Table/tk:Field[tk:List]">
<xsl:sort select="tk:List/@Order" data-type="number"/>
</xsl:apply-templates>
注意字符串变量
<xsl:variable name="Test" select="'title'"/>
<xsl:value-of
select = Expression
disable-output-escaping = "yes" | "no"
</xsl:value-of>
<xsl:text
disable-output-escaping = "yes" | "no">
</xsl:text>
<xsl:template name="ea:WhiteSpace">
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
</xsl:template>
XML File (item.xml)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="element.xsl" ?>
<root>
<item>My Item</item>
</root>
XSLT File (element.xsl)
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="item">
<xsl:element name="xsl:template">
<xsl:attribute name="match">cost</xsl:attribute>
<xsl:attribute name="xml:space">preserve</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Output
This is the formatted output:
My Item
The following is the processor output, with line breaks added for clarity.
<?xml version="1.0"?>
<xsl:template match="cost"
xml:space="preserve"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
My Item</xsl:template>
<xsl:attribute-set name="ea:WrapAttrs">
<xsl:attribute name="nowrap"/>
</xsl:attribute-set>
<!--不能为空的字段的显示名称的td的attribute-set-->
<xsl:attribute-set name="ea:NonEmptyAttrs" use-attribute-sets="ea:WrapAttrs">
<xsl:attribute name="align">right</xsl:attribute>
<xsl:attribute name="bgcolor">#E2EBF6</xsl:attribute>
</xsl:attribute-set>
<a href="{$HttpRef}">
<xsl:if test="$Target != ''">
<xsl:attribute name="target"><xsl:value-of select="$Target"/></xsl:attribute>
</xsl:if>
<xsl:value-of select="$ItemValue"/>
</a>
<xsl:choose>
<xsl:when test="$BigHrefType='HREF'">
<a href="{$HrefAddress}">
<xsl:value-of select="$Value"/>
</a>
</xsl:when>
<xsl:when test="$BigHrefType='EMAIL'">
<a href="mailto:{$Value}">
<xsl:value-of select="$Value"/>
</a>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="ea:ProcessText">
<xsl:with-param name="Text" select="$Value"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
<xsl:import href="PublicUtil.xslt"/>
<xsl:output method="html" indent="no"/>
<xsl:variable name="ea:NoRecord">
<tr>
<td colspan="20" class="pad5">没有内容</td>
</tr>
</xsl:variable>
<xsl:copy-of select="$ea:NoRecord"/>
current()
通常情况下,和“.”返回的值相同。只有在filter情况下,才不同。
<xsl:apply-templates select="//glossary/item[@name=current()/@ref]"/
document()
<xsl:variable name="ea:FieldList" select="document('')/xsl:stylesheet/ea:FieldList"/>
format-number()
format-number(53.51, "#.0000") // "53.5100"
递归:
<xsl:template name="ea:ProcessText">
<xsl:param name="Text"/>
<xsl:choose>
<xsl:when test="contains($Text,' ')">
<xsl:value-of select="substring-before($Text,' ')"/>
<br/>
<xsl:call-template name="ea:ProcessText">
<xsl:with-param name="Text" select="substring-after($Text,' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<p style="word-break:break-all">
<xsl:value-of select="$Text"/>
</p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="ShowRow">
<xsl:param name="CurIndex" select="0"/>
<xsl:param name="Data"/>
<xsl:param name="CurRow"/>
<xsl:if test="$CurIndex=0">
<td bgcolor="#6D8CAB">
<a href="{concat($WeekLink, 'Date=', $Data/Date)}">
<img src="{concat('../images/link_', $CurRow + 1, '.gif')}" width="18" height="40" border="0" alt="周历"/>
</a>
</td>
</xsl:if>
<xsl:if test="$CurIndex < 7">
<xsl:call-template name="ShowData">
<xsl:with-param name="Data" select="$Data"/>
</xsl:call-template>
<xsl:for-each select="$Data">
<xsl:call-template name="ShowRow">
<xsl:with-param name="CurIndex" select="$CurIndex + 1"/>
<xsl:with-param name="Data" select="following-sibling::DateDescription[1]"/>
</xsl:call-template>
</xsl:for-each>
</xsl:if>
</xsl:template>
优先级问题
<xsl:import>存在优先级问题
模糊匹配的,例如*,优先级比较低
属性值模板
<a href="{concat($WeekLink, 'Date=', $Data/Date)}">
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。