有人可以告诉我如何在我的XSL转换中打印出变量吗?看起来似乎很容易做,但我似乎无法做到。这是我的代码:
<?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>
如果我使用“Wibble”(字符串 - 而不是节点)的xmlElem值调用此模板,我会得到以下输出:
<Wibble>
1: {$xmlElem}.
2: {$xmlElem}.
</Wibble>
所以我的参数正确完成,我无法正常访问它。有人能告诉我如何正确打印$ xmlElem以便我看到:
<Wibble>
1: Wibble.
2: Wibble.
</Wibble>
感谢您的任何意见。
答案 0 :(得分:32)
所有答案都缺少重要内容:请进一步阅读:
有人可以告诉我怎么做 在我的XSL中打印出一个变量 转变?看起来很简单 要做的事,但我似乎无法做到 做到这一点。
在XSLT 1.0中,有两种主要方式可以生成<xsl:variable>
,的内容,具体取决于它是否包含标量值(字符串,数字或布尔值),或者具有结构化value - 节点集(来自xml文档的一个或多个节点):
<xsl:value-of select="$yourscalarVariableName"/>
用它来产生标量值。实际上会生成一个包含此标量值的文本节点。
<xsl:copy-of select="$yourStructuredVariableName"/>
使用此选项可生成变量中包含的所有节点的副本。
了解非常重要的是,如果xsl:variable
包含节点列表并且使用了<xsl:value-of ...>
指令,则只有第一个节点的字符串值将是产生的。这是一个经常犯的错误和常见问题解答。
还有第三种方法:如果<xsl:variable>
应该用于制作属性:
<someLiteralResultElement someAttribute="{$theVariable}"/>
评估花括号中的XPath表达式(称为AVT -- attribute-value-template),并将结果放入属性值中。
在XSLT 2.0 中,<xsl:value-of .../>
指令在不以兼容模式运行时会生成一个文本节点列表 - 一个用于xsl:variable
中包含的每个节点。在兼容模式下运行(指定了属性version="1.0"
)时,<xsl:value-of>
指令的行为方式与XSLT 1.0中的相同。
在Xslt 2.0中 <xsl:copy-of>
的行为与XSLT 1.0中的行为相同。但是,建议使用新的<xsl:sequence>
指令,因为前者会生成每个节点的新副本,而<xsl:sequence>
不会生成新的节点副本。
答案 1 :(得分:10)
试试这个:
<xsl:value-of select="$xmlElem"/>
答案 2 :(得分:4)
您可以使用:
<xsl:value-of select="$xmlElem" />
答案 3 :(得分:3)
{$ xmlElem}语法仅适用于属性。你需要:
<xsl:value-of select="$xslElem" />