从任何XML到名称 - 值xml元素列表的XSLT转换

时间:2013-06-19 14:43:49

标签: xml xslt

我正在尝试将XML文档(实际上,我需要转换为任何xml)转换为元素列表,这些元素将值存储为元素值,并将原始节点的名称作为名为“name”的属性存储,如:

<rootNode>
    <element name="first">value1</element>
    <element name="try">valueX</element>
<rootNode>

是原作:

<a>
    <first>value1</first>
    <try>valueX</try>
</a>

1 个答案:

答案 0 :(得分:0)

我同意这是一个非常糟糕的主意。它与大多数人想要的完全相反......将良好的XML转化为糟糕的形式。然后,如果没有您尝试复制的任何层次结构,则很简单。你想要一个像这样的结构:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">
        <xsl:output indent="yes"/>
        <xsl:template match="a">
            <rootNode>
                <xsl:apply-templates/>
            </rootNode>
        </xsl:template>
        <xsl:template match="*">
            <xsl:variable name="name" select="name()"/>
            <element>
                <xsl:attribute name="name">
                    <xsl:value-of select="$name"/>
                </xsl:attribute>
                <xsl:value-of select="."/>
            </element>
        </xsl:template>
        <xsl:template match="text()"/>
    </xsl:stylesheet>

这会产生:

<rootNode>
   <element name="first">value1</element>
   <element name="try">valueX</element>
</rootNode>