通过XSLT将多级XML树重新排列为单级

时间:2013-09-15 18:39:43

标签: xslt

我正在尝试转换以下XML文本:

<root>
    <Header>
        <ID>1000</ID>
        <Line>
            <LineID>10</LineID>
        </Line>
        <LineGroup>
            <LineID>11</LineID>
            <Line>
                <LineID>12</LineID>
            </Line>
            <Line>
                <LineID>13</LineID>
            </Line>
        </LineGroup>
    </Header>
</root>

到以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<row>
    <ID>1000</ID>
    <LineID>10</LineID>
</row>
<row>
    <ID>1000</ID>
    <LineID>11</LineID>
</row>
<row>
    <ID>1000</ID>
    <LineID>12</LineID>
</row>
<row>
    <ID>1000</ID>
    <LineID>13</LineID>
</row>

LineGroup元素似乎对我来说是一个障碍。

非常感谢帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

您的预期输出格式不正确xml(因此我希望<root>元素存在。请尝试以下脚本

<?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="/">
        <root>
            <xsl:apply-templates select="root/Header" />
        </root>
    </xsl:template>

    <xsl:template match="Header">
        <xsl:variable name="ID" select="ID" />
        <xsl:for-each select="//LineID">
            <row>
                <ID>
                    <xsl:value-of select="$ID" />
                </ID>
                <xsl:copy-of select="." />
            </row>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>