打印出XSL变量的值

Lee*_*ald 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>
Run Code Online (Sandbox Code Playgroud)

如果我使用"Wibble"(字符串 - 而不是节点)的xmlElem值调用此模板,我将得到以下输出:

<Wibble>
      1: {$xmlElem}.
      2: {$xmlElem}.
</Wibble>
Run Code Online (Sandbox Code Playgroud)

所以我的参数正常,我无法正常访问它.有人能告诉我如何正确打印$ xmlElem以便我看到:

<Wibble>
      1: Wibble.
      2: Wibble.
</Wibble>
Run Code Online (Sandbox Code Playgroud)

感谢您的任何意见.

Dim*_*hev 32

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

有人可以告诉我如何在我的XSL转换中打印出变量吗?看起来似乎很容易做,但我似乎无法做到.

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

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

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

非常重要的是要知道如果xsl:variable包含节点列表并且使用该<xsl:value-of ...>指令,则仅产生第一个节点的字符串值.这是一个经常犯的错误和FAQ.

还有第三种方法:如果<xsl:variable>应该用于生成属性:

  <someLiteralResultElement someAttribute="{$theVariable}"/>
Run Code Online (Sandbox Code Playgroud)

计算花括号中的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>而不生成新的节点副本.


And*_*are 10

试试这个:

<xsl:value-of select="$xmlElem"/>
Run Code Online (Sandbox Code Playgroud)