嘿,伙计们,我正试图将属性值设置为XSL中的变量,我遇到了一点问题。
XSL Code就是这样的
<xsl:template match="/">
<xsl:call-template name="GETSTOCK">
<xsl:with-param name="ARTICLES" select="/Result/Response/STOCK/QUOTE[ @symbol = 'MSFT' ]" />
</xsl:call-template>
</xsl:template>
<xsl:template name="GETSTOCK">
<xsl:param name="data" />
<xsl:for-each select="$data">
<xsl:variable name="NAME" select="@name" />
<p>{$NAME}</p>
</xsl:for-each>
</xsl:template>
我的XML是这样的
<Response>
<STOCK>
<QUOTE symbol="MSFT" name="Microsoft CA"/>
<QUOTE symbol="MSFT" name="Microsoft US"/>
<QUOTE symbol="MSFT" name="Apple CA"/>
<QUOTE symbol="MSFT" name="Apple US"/>
<QUOTE symbol="MSFT" name="Apple AU"/>
</STOCK>
</Response>
当前输出如下所示:
{$NAME}
{$NAME}
这基本上意味着它抓取了两个节点,而不是值。如何获得属性名称的值并将其填充到变量中?
提前感谢您的帮助!
对于XSLT 1.0和2.0,您需要使用
<xsl:value-of select="$NAME"/>
输出变量的值。
在XSLT 1.0/2.0中,{$NAME}
只适用于属性值;在XSLT 3.0中,如果您要求,它可以工作,请参阅http://www.w3.org/TR/xslt-30/#dt-text-value-template。
Martin的回答是绝对正确的,但是如果您展示的实际上是您正在使用的代码,那么就没有理由使用变量了。直接在属性上使用xsl:value-of
:
<xsl:for-each select="$data">
<p>
<xsl:value-of select="@name" />
</p>
</xsl:for-each>