将选定的attr值设置为XSL变量



嘿,伙计们,我正试图将属性值设置为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>

相关内容

  • 没有找到相关文章

最新更新