使用多个子项对 XML 进行分组

问题描述

大家好,有人可以帮忙使用 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