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

时间:2014-05-22 16:15:09

标签: xml xslt xslt-1.0

嘿伙计们我正在尝试在XSL中将属性值设置为变量,而且我遇到了一些问题。

XSL代码就是这样

<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}

这基本上意味着它抓住了两个节点,而不是价值。如何获取属性名称的值并将其填充到变量中?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

使用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

答案 1 :(得分:1)

Martin的回答是绝对正确的,但是如果你所展示的实际上是你正在使用的代码,那么根本没有理由使用变量。只需直接在属性上使用xsl:value-of

<xsl:for-each select="$data">
    <p>
        <xsl:value-of select="@name" />
    </p>
</xsl:for-each>
相关问题