问题
I want to convert an XML with repeating elements into another XML with elements grouped based on position.
Sample input XML
<root>
<param>test1</param>
<param>test2</param>
<param>test3</param>
<param>test4</param>
<param>test5</param>
<param>test6</param>
<param>test7</param>
<param>test8</param>
</root>
Desired output
<root>
<group>
<param>test1</param>
<param>test2</param>
<param>test3</param>
</group>
<group>
<param>test4</param>
<param>test5</param>
<param>test6</param>
</group>
<group>
<param>test7</param>
<param>test8</param>
</group>
</root>
Each <group>
in the output has x number of <param>
, in my example x=3. The last <group>
may contain less number of <param>
based on the input.
回答1:
You could do:
XSLT 1.0
<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:copy>
<xsl:for-each select="param[position() mod 3 = 1]">
<group>
<xsl:copy-of select=". | following-sibling::param[position() < 3]"/>
</group>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
来源:https://stackoverflow.com/questions/42654855/xpath-or-xslt-for-converting-repeating-xml-into-position-based-grouped-xml