<?xml version='1.0' encoding='UTF-8' ?> <xsl:stylesheet version="1.0" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template name="ControlledListStructure"> <xsl:param name="xmlElem" /> <xsl:param name="dataname" /> <xsl:element name="{$xmlElem}"> 1: <xsl:text>{$xmlElem}</xsl:text>. 2: {$xmlElem}. </xsl:element> </xsl:template> </xsl:stylesheet>
如果我使用xmlElem的值为“Wibble”(一个字符串而不是一个节点)调用此模板,我将得到以下输出:
<Wibble> 1: {$xmlElem}. 2: {$xmlElem}. </Wibble>
所以我的参数是正确的,我只是无法正确访问.有人可以告诉我如何让$xmlElem正确打印,以便我看到:
<Wibble> 1: Wibble. 2: Wibble. </Wibble>
感谢任何投入.
Can someone please tell me how to
print out a variable in my XSL
transform? Seems like an easy enough
thing to do but I just can’t seem to
do it.
在XSLT 1.0中,根据它是否包含标量值(字符串,数字或布尔值)还是具有结构化值 – 一个节点集(从xml的一个或多个节点),可以生成一个<xsl:variable>
的内容的两种主要方法文件):
> <xsl:value-of select="$yourscalarVariableName"/>
使用它来产生标量值.实际生成一个包含这个标量值的文本节点.
> <xsl:copy-of select="$yourStructuredVariableName"/>
使用它来生成包含在变量中的所有节点的副本.
非常重要的是要知道,如果xsl:变量包含一个节点列表,< xsl:value-of ...>使用指令,只会产生第一个节点的字符串值.这是一个经常提交的错误和常见问题.
有第三种方法:如果< xsl:variable>应用于生成属性:
<someLiteralResultElement someAttribute="{$theVariable}"/>
评估大括号(称为AVT — attribute-value-template)中的XPath表达式,并将结果放入属性值.
在XSLT 2.0中,< xsl:value-of ... />指令,当运行不兼容模式时,会生成一个文本节点列表,一个用于xsl:变量中包含的每个节点.当以兼容性模式运行(具有指定的属性version =“1.0”)时,< xsl:value-of>指令的行为方式与XSLT 1.0中的相同.
在Xslt 2.0< xsl:copy-of>行为方式与XSLT 1.0相同.然而,建议使用新的<xsl:sequence>
指令,因为前者会产生每个节点的新副本,而< xsl:sequence>不产生节点的新副本.