XSLT2 从嵌套输入结构生成多个输出

XSLT2 Generate multiple outputs from a nested input structure

我正在使用 XSLT 2.0 (Saxon PE 9.5) 从输入创建多个 XML 文件,使用 xsl:result-document。每个item可以包含多个item,一个item内有typeA和typeB。对于我想生成的每种此类类型,XML。 示例:
input.xml:

<task>
  <items>
    <item>
      <typeA>
        <id>A1</id>
        ...
      </typeA>
      <typeB>
        <id>B</id>
        ...
      </typeB>
    </item>
    <item>
      <typeA>
        <id>A2</id>
        ...
      </typeA>
    </item>
  </items>
</task>

期望的输出:
out1_typea.xml:

<task>
  <items>
    <item>
      <typeA>
        <id>A</id>
        ...
      </typeA>
    </item>
  </items>
</task>

out1_typeb.xml:

<task>
  <items>
    <item>
      <typeB>
        <id>B</id>
        ...
      </typeB>
    </item>
  </items>
</task>

out2_typea.xml:

<task>
  <items>
    <item>
      <typeA>
        <id>A2</id>
        ...
      </typeA>
    </item>
  </items>
</task>

我开始使用以下基于项目拆分的转换:

  <xsl:template match="/task">
    <xsl:for-each select="items/item">
      <xsl:result-document href="out{position()}.xml">
        <task xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <items>
            <item>
              <xsl:copy-of select="*" />
            </item>
          </items>
          <xsl:copy-of select="../../(* except items)" />
        </task>
      </xsl:result-document>
    </xsl:for-each>
  </xsl:template>

但不知道如何进一步拆分类型。

不就是:

<xsl:template match="/task">
  <xsl:for-each select="items/item">
    <xsl:variable name="pos" select="position()"/>
    <xsl:for-each select="*">
      <xsl:result-document href="out{$pos}_{name()}.xml">
        <task>
          <items>
            <item>
              <xsl:copy-of select="." />
            </item>
          </items>
          <xsl:copy-of select="../../../(* except items)" />
        </task>
      </xsl:result-document>
    </xsl:for-each>
  </xsl:for-each>
</xsl:template>