我是XSLT的新手。我需要从xml / xsl transform
获得以下结果<root>
<abc>
<aaa></aaa>
<aaa></aaa>
<aaa></aaa>
<bbb>
<ccc></ccc>
</bbb>
</abc>
</root>
我希望输出html类似于:
<root>
<abc>
<ddd>
<aaa></aaa>
<aaa></aaa>
<aaa></aaa>
</ddd>
<bbb>
<ccc></ccc>
</bbb>
</abc>
</root>
请帮忙。感谢
答案 0 :(得分:2)
如果您确实只是将aaa
个元素收集到一个ddd
中,那么这在XSLT 1.0和2.0中都很简单。
首先,阅读有关XSLT identity transform的信息,该信息在其副本节点上按原样输出。
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
然后,您只需要要转换的节点的模板。在这种情况下,您将通过添加新子项来转换abc
元素。
要将所有aaa
元素聚集到一个ddd
中,您只需执行此操作
<ddd>
<xsl:apply-templates select="aaa" />
</ddd>
然后要处理其他孩子,只需执行此操作即可选择aaa
<xsl:apply-templates select="node()[not(self::aaa)]" />
试试这个XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="abc">
<ddd>
<xsl:apply-templates select="aaa" />
</ddd>
<xsl:apply-templates select="node()[not(self::aaa)]" />
</xsl:template>
</xsl:stylesheet>