xslt - 如何在XSLT中创建具有动态属性的元素?

标签 xslt xpath

我有一些看起来像这样的XML:

  <ExtensionObject>
    <Value xmlns="">
        <Key>key01</Key>
        <StringValue>somewords</StringValue>
    </Value>
    <Value xmlns="">
        <Key>key01</Key>
        <NumberValue>12345</NumberValue>
    </Value>

...........hundreds more Values..............
  </ExtensionObject>


我宁愿这样写XSLT:

<xsl:template match="/ExtensionObject">
    <VResult>
        <xsl:for-each select="Value">
            <xsl:variable name="fld">
                <Value><xsl:value-of select="Key"/></Value>
            </xsl:variable>
            <Result field="$fld">
                <Value>
                    <xsl:choose>
                        <xsl:when test="NumberValue">
                            <xsl:value-of select="NumberValue"/>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:value-of select="StringValue"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </Value>
            </Result>
        </xsl:for-each>
    </VResult>
</xsl:template>


并期望得到这个:

<VResult>
    <Result field="key01"><Value>somewords</Value></Result>
    <Result field="key02"><Value>12345</Value></Result>
    ...........hundreds more Values..............
</VResult>


相反,我得到了:

<VResult>
    <Result field="$fld"><Value>somewords</Value></Result>
    <Result field="$fld"><Value>12345</Value></Result>
    ...........hundreds more Values..............
</VResult>


有谁知道我该如何插入带有键值的字段名称?

最佳答案

<xsl:attribute name="field"><xsl:value-of select="Key"/></xsl:attribute>

关于xslt - 如何在XSLT中创建具有动态属性的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11670712/

相关文章:

xml - 使用 XSLT 拆分和展平节点

java - Java 中用于获取 xml 元素的 XPath 表达式

xml - 带有命名空间的 XML 文档的 XPath

xpath - 使用信封模式在 xmlDisassembler 中进行反批处理,因空消息而失败

python - 从元素/节点中提取 HTML

xml - XSLT 中如何输出当前元素路径?

xml - 在 XSLT 中使用正则表达式

html - 使用 XSL 解析 XML 中的标记

xslt - 带子字符串的 xsl 副本

java - 如何让 XSLT 在输出数值运算结果时停止使用科学记数法?