我有以下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>
答案 0 :(得分: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>