打印出XSL变量的值

时间:2009-04-02 12:57:17

标签: xml xslt

有人可以告诉我如何在我的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>

感谢您的任何意见。

4 个答案:

答案 0 :(得分:32)

所有答案都缺少重要内容:请进一步阅读:

  

有人可以告诉我怎么做   在我的XSL中打印出一个变量   转变?看起来很简单   要做的事,但我似乎无法做到   做到这一点。

在XSLT 1.0中,有两种主要方式可以生成<xsl:variable>的内容,具体取决于它是否包含标量值(字符串,数字或布尔值),或者具有结构化value - 节点集(来自xml文档的一个或多个节点):

  1. <xsl:value-of select="$yourscalarVariableName"/>用它来产生标量值。实际上会生成一个包含此标量值的文本节点。

  2. <xsl:copy-of select="$yourStructuredVariableName"/>使用此选项可生成变量中包含的所有节点的副本。

  3. 了解非常重要的是,如果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" />