将嵌套的XML属性转换为XSLT元素

将嵌套的XML属性转换为XSLT元素,xml,nested,xslt-1.0,Xml,Nested,Xslt 1.0,我的输入xml是 <?xml version="1.0" encoding="UTF-8"?> <foobar atr0="NO" atr2="NO"> <foo atr1="NO" more="more">ONE</foo> <bar atr6="ATR"> <baz attr="123" attr222="22">TWO</baz> </bar> </

我的输入xml是

<?xml version="1.0" encoding="UTF-8"?>
<foobar atr0="NO" atr2="NO">
    <foo atr1="NO" more="more">ONE</foo>
    <bar atr6="ATR">
        <baz attr="123" attr222="22">TWO</baz>
    </bar>
</foobar>

一个
两个
我期望的输出是

<?xml version="1.0" encoding="UTF-8"?>
<foobar>
    <foo>
        <a>
            <a>
                <a>atr1</a>
                <v>NO</v>
            </a>
            <a>
                <a>more</a>
                <v>more</v>
            </a>
        </a>
        <v>ONE</v>
    </foo>
    <bar>
        <baz>
            <a>
                <a>
                    <a>attr</a>
                    <v>123</v>
                </a>
                <a>
                    <a>attr222</a>
                    <v>22</v>
                </a>
            </a>
            <v>TWO</v>
        </baz>
        <a>
            <a>
                <a>atr6</a>
                <v>ATR</v>
            </a>
        </a>
    </bar>
    <a>
        <a>
            <a>atr0</a>
            <v>NO</v>
        </a>
        <a>
            <a>atr2</a>
            <v>NO</v>
        </a>
    </a>
</foobar>

atr1
不
更多
更多
一个
属性
123
属性222
22
两个
atr6
自动标签阅读器
atr0
不
atr2
不
我试图将每个属性分解为具有名称和值的不同元素。foobar元素属性是foobar元素子元素的最后一个子元素。父元素的属性将作为最后一个子元素

我的xslt脚本是-

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@*| node()"/>
            <v>
                <xsl:value-of select="."/>
            </v>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="@*">
        <a>
            <a>
                <xsl:value-of select="name()"/>
            </a>
            <v>
                <xsl:value-of select="."/>
            </v>
        </a>
    </xsl:template>
</xsl:stylesheet>

这适用于1属性。我可以为嵌套的元素和属性做什么?

以下XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <!-- Matches all kind of nodes -->
    <xsl:template match="*">
        <xsl:copy>
            <xsl:apply-templates select="*" />
            <a>
                <xsl:apply-templates select="@*" />
            </a>
            <xsl:apply-templates select="text()" />
        </xsl:copy>
    </xsl:template>

    <!-- Matches all attributes -->
    <xsl:template match="@*">
        <a>
            <a><xsl:value-of select="name()" /></a>
            <v><xsl:value-of select="." /></v>
        </a>
    </xsl:template>

    <!-- Matches text nodes -->
    <xsl:template match="text()">
        <v><xsl:value-of select="." /></v>
    </xsl:template>
</xsl:stylesheet>

产生想要的输出