使用XSL从键/值对创建节点

时间:2017-10-04 12:12:07

标签: xml xslt

我正在尝试为输入xml中的每个键/值对创建节点:

<Rowsets>
    <Rowset>
        <Row>
            <value>0</value>
            <id>SOME_KEY</id>
        </Row>
        <Row>
            <value>Hello world</value>
            <id>ANOTHER_KEY</id>
        </Row>
    </Rowset>
</Rowsets>

所以输出应该如下所示:

<PARAMETERS>
    <SOME_KEY>0</SOME_KEY>
    <ANOTHER_KEY>Hello world</ANOTHER_KEY>
</PARAMETERS>

我使用xsl-template在XSL转换下使用,但它没有提供任何输出

 <?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">

    <PARAMETERS>
        <xsl:template match="/Rowsets/Rowset/Row"> 
            <xsl:element name="{id}" value="{value}">
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:template>
    </PARAMETERS>

 </xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

请修改XSLT,如下所示

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"
    version="2.0">

    <xsl:output method="xml" indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:template match="Rowsets/Rowset">
        <PARAMETERS>
            <xsl:for-each select="Row">
                <xsl:element name="{id}">
                    <xsl:value-of select="value" />
                </xsl:element>
            </xsl:for-each>
        </PARAMETERS>
    </xsl:template>
</xsl:stylesheet>