1

我有一个 xml,我需要使用 xslt 2.0 对其进行转换以提供不同的输出 xml。输出 xml 需要在输出 xml 字符串中包含 XSLT 变量的值。但是 XSLT 变量值没有被拾取。

高度赞赏帮助。提前致谢。

输入xml:`

`<additionalParams> 
    <qryParam name = "rank" value = "300"/>
    <qryParam name = "id" value = "id1"/>
    <qryParam name = "max" value= "max1"/>
</additionalParams> 

预期的输出 xml:

<additionalParameter name="rank" type="text">
   <value>"300"</value>
</additionalParameter>
<additionalParameter name="id" type="text">
   <value>"id1"</value>
</additionalParameter>
<additionalParameter name="max" type="text">
   <value>"max1"</value>
</additionalParameter>

当前 XSLT:

<xsl:for-each select="./additionalParams/qryParam">
    <xsl:variable name = "elmtName" select="@name"/>
    <xsl:variable name = "elmtValue" xsl:value-of select="@value"/>
    <additionalParameter name="$elmtName" type="text">
       <value>"$elmtValue"</value>
    </additionalParameter>
</xsl:for-each>

转换后的当前结果 xml - 它没有获取变量值。

<otherQueryParameters>
    <additionalParameter name="$elmtName" type="text">
    <value>"$elmtValue"</value>
    </additionalParameter>
    <additionalParameter name="$elmtName" type="text">
        <value>"$elmtValue"</value>
    </additionalParameter>
    <additionalParameter name="$elmtName" type="text">
        <value>"$elmtValue"</value>
    </additionalParameter>
</otherQueryParameters>
4

2 回答 2

1

请注意,输出值的默认方式是 <xsl:value-of select="your_value"/> 其中 xsl:value-of 是必须放在尖括号中的元素。您在 XSLT 代码的第 3 行中错过了这些,撇开这将是不可能的元素中的元素。相反,您可以使用属性值模板 (AVT) 将值放在大括号中。这并不适用于所有情况。在键入此内容时,Peter Rader 给出了一个正确答案,即在不必要的情况下应该去掉变量。您可以直接访问这些值:

<xsl:for-each select="./additionalParams/qryParam">
    <additionalParameter name="{@name}" type="text">
       <value><xsl:value-of select="@value"/></value>
    </additionalParameter>
</xsl:for-each>
于 2013-08-09T06:35:16.193 回答
0

试试这个 xslt:

<xsl:for-each select="./additionalParams/qryParam">
    <xsl:variable name = "elmtName" select="@name"/>
    <xsl:variable name = "elmtValue" select="@value"/>
    <additionalParameter name="{$elmtName}" type="text">
       <value><xsl:value-of select="$elmtValue"/></value>
    </additionalParameter>
</xsl:for-each>
于 2013-08-09T06:21:29.337 回答