1

我有以下 XML:

<root>
<section>
    <item name="a">
        <uuid>1</uuid>
    </item>
</section>
<section>
    <item name="b">
        <uuid>2</uuid>
    </item>
</section>
</root>

我想将其转换为以下 XML:

<root>
<section>
    <item name="a">
        <uuid>1</uuid>
    </item>
    <item name="b">
        <uuid>2</uuid>
    </item>
</section>
</root>

提前致谢。

更新。

稍有不同的示例包含其他元素和属性。

输入:

<root age="1">
<description>some text</description>
<section>
    <item name="a">
        <uuid>1</uuid>
    </item>
</section>
<section>
    <item name="b">
        <uuid>2</uuid>
    </item>
</section>
</root>

我想将其转换为:

<root age="1">
<description>some text</description>
<section>
    <item name="a">
        <uuid>1</uuid>
    </item>
    <item name="b">
        <uuid>2</uuid>
    </item>
</section>
</root>
4

1 回答 1

1

以下 Xsl 应该可以工作:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output indent="yes" omit-xml-declaration="yes"/>
    <xsl:strip-space elements="section item"/>
    <xsl:template match="/root">
        <root>
            <section>
                <xsl:apply-templates select="section"/>
            </section>
        </root>
    </xsl:template>

    <xsl:template match="item">
        <xsl:copy-of select="."/>
    </xsl:template>

</xsl:stylesheet>

它给:

<root>
   <section>
      <item name="a">
         <uuid>1</uuid>
      </item>
      <item name="b">
         <uuid>2</uuid>
      </item>
  </section>
</root>

更新:

对于第二个示例,您可以使用以下 Xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output indent="yes" omit-xml-declaration="yes"/>
    <xsl:strip-space elements="root item"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
   </xsl:template>

   <xsl:template match="description">
       <xsl:copy-of select="."/>
       <section>
           <xsl:apply-templates select="following-sibling::section/item"/>
       </section>
   </xsl:template>

   <xsl:template match="section" />

   <xsl:template match="item">
      <xsl:copy-of select="."/>
   </xsl:template>

</xsl:stylesheet>
于 2012-04-04T08:08:49.100 回答