问题描述
大家好,有人可以帮忙使用 xslt 吗?我正在尝试按特定节点对这个 xml 进行分组,但我一直遇到一个问题,该问题不包括 child5 下的嵌套信息......任何帮助将不胜感激。
这是开始的xml:
<parent>
<a>1</a>
<b>
<b1>
<b2>data</b2>
</b1>
</b>
<a>1</a>
<b>
<b1>
<b2>data2</b2>
</b1>
</b>
</parent>
期望的输出是:
<parent>
<data>
<a>1</a>
<b>
<b1>
<b2>data</b2>
</b1>
</b>
</data>
<data>
<a>2</a>
<b>
<b1>
<b2>data</b2>
</b1>
</b>
</data>
</parent>
我试过了,但是它把 b 下的所有信息都改成了一个字符串...?
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="parent">
<parent>
<xsl:for-each-group select="*" group-starting-with="a">
<data>
<xsl:for-each select="current-group()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:for-each>
</data>
</xsl:for-each-group>
</parent>
</xsl:template>
</xsl:stylesheet>
解决方法
在分组内部,您似乎只想复制该组,例如
<xsl:template match="parent">
<parent>
<xsl:for-each-group select="*" group-starting-with="a">
<data>
<xsl:copy-of select="current-group()"/>
</data>
</xsl:for-each-group>
</parent>
</xsl:template>
或者使用基本模板设置身份转换并使用 <xsl:apply-templates select="current-group()"/>
而不是 xsl:copy-of
。