将由其属性标识的多个XML元素转换为复杂的元素

时间:2017-10-09 11:10:56

标签: xml xslt

我对XSLT很陌生,所以我可能会遗漏一些非常明显的东西。

我有这种格式的源XML:

来源:

<?xml version="1.0" encoding="UTF-8"?>
<variables id="simulation">
    <variable id="Code">75</variable>
    <variable id="Type">Varial</variable>
    <variable id="owner">Jeremy</variable>
</variables>

我想处理它,看起来像这样:

<Envelope>
    <Code>75</Code>
    <Type>Varial</Type>
    <Owner>Jeremy</Owner>
</Envelope>

我尝试使用xsl:variable来保存值

<xsl:variable
select="<xsl:template match="variable[@id='Code']" name="varcode">">
</xsl:variable>

使用在线工具验证和测试XSLT我没有成功完成任务。

到目前为止,这是我的XSLT,它能够获取第一个元素的值:

<xsl:template match="variable[@id='Code']" name="varcode">
<Envelope>
    <Code><xsl:value-of select="."/></Code>
    <Type></Type>
    <Owner></Owner>
</Envelope>
</xsl:template>
</xsl:stylesheet>

任何人都可以帮助我获得其余的价值吗? 感谢

2 个答案:

答案 0 :(得分:2)

试试这个简单的xslt

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <xsl:template match="variables[@id='simulation']">
        <Envelope>
            <Code>
                <xsl:value-of select="variable[@id='Code']" />
            </Code>
            <Type>
                <xsl:value-of select="variable[@id='Type']" />
            </Type>
            <Owner>
                <xsl:value-of select="variable[@id='owner']" />
            </Owner>
        </Envelope>
    </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:1)

写两个模板

<xsl:template match="/*">
    <Envelope>
        <xsl:apply-templates/>
    </Envelope>
</xsl:template>

<xsl:template match="variable[@id]">
    <xsl:element name="{@id}">
        <xsl:value-of select="."/>
    </xsl:element>
</xsl:template>

您可以通过简单但通用的方式处理该任务。