需要将 XML 与文件夹名称分组,然后再分组

Need to group the XML with Folder name and then on sections

            <custom> 
            <section name="A">
            <element name="Folder">A11</element>
            <element name="Name">Test1</element>
            <element name="Result">Fail</element>                
            </section>
            <section name="B">
            <element name="Folder">A11</element>
            <element name="Name">Test2</element>
            <element name="Result">Pass</element>               
            </section>
            <section name="C">
            <element name="Folder">A12</element>
            <element name="Name">Test3</element>
            <element name="Result">Pass</element>                
            </section>
            <section name="D">
            <element name="Folder">A13</element>
            <element name="Name">Test4</element>
            <element name="Result">Pass</element>                
            </section>
            </custom>
            <custom>             
            <section name="A">
            <element name="Folder">A12</element>
            <element name="Name">Test1</element>
            <element name="Result">Pass</element>                
            </section>
            <section name="B">
            <element name="Folder">A12</element>
            <element name="Name">Test2</element>
            <element name="Result">Fail</element>                
            </section>
            <section name="C">
            <element name="Folder">A11</element>
            <element name="Name">Test3</element>
            <element name="Result">Pass</element>      
            </section>
            <section name="D">
            <element name="Folder">A13</element>
            <element name="Name">Test4</element>
            <element name="Result">Pass</element>                
            </section>
            </custom>

按文件夹分组 文件夹下的部分名称 所有元素名称

例如

A11 - 部分名称="A" - 文件夹、名称、结果值

A12 - 部分名称="C" - 文件夹、名称、结果值

A13 - 部分名称="D" - 文件夹、名称、结果值

--每个自定义都一样---

需要以下格式的结果:

            <root>
            <custom>
            <Folder>A11
            <section name>A
            <element name="Folder">A11</element>
            <element name="Name">Test1</element>
            <element name="Result">Fail</element> 
            </section>
            <section name="B">
            <element name="Folder">A11</element>
            <element name="Name">Test2</element>
            <element name="Result">Pass</element>
            </section>
            </Folder>
            <Folder>A12
            <section name>C
            <element name="Folder">A12</element>
            <element name="Name">Test3</element>
            <element name="Result">Pass</element> 
            </section> 
            </Folder>
            <Folder>A13
            <section name="D">
            <element name="Folder">A13</element>
            <element name="Name">Test4</element>
            <element name="Result">Pass</element>    
            </section> 
            </Folder>
            <custom>
            <custom>
            <Folder>A11
            <section name>C
            <element name="Folder">A11</element>
            <element name="Name">Test3</element>
            <element name="Result">Pass</element> 
            </section> 
            </Folder>
            <Folder>A12
            <section name>A
            <element name="Folder">A12</element>
            <element name="Name">Test1</element>
            <element name="Result">Pass</element>
            </section> 
            <section name>B
            <element name="Folder">A12</element>
            <element name="Name">Test2</element>
            <element name="Result">Fail</element> 
            </section> 
            </Folder>
            <Folder>A13
            <section name="D">
            element name="Folder">A13</element>
            <element name="Name">Test4</element>
            <element name="Result">Pass</element>  
            </section> 
            </Folder>
            <custom>
            </root>

您应该首先从 XSLT Identity Template 开始,它从输入文档

复制所有节点
<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

但是您可以添加一个模板来匹配 custom 元素,然后可以使用该模板对 section 元素进行分组。在 XSLT 2.0 中,您可以为此使用 xsl:for-each-group

<xsl:for-each-group select="section" group-by="element[@name='Folder']">

在其中,创建一个新的 folder 元素,然后将现有的 section 元素复制到其中相对简单。

  <folder name="{current-grouping-key()}">
    <xsl:apply-templates select="current-group()" />
  </folder>

试试这个 XSLT。请注意,这不会给您您在问题中显示的 XML,因为您显示的 XML 格式不正确(<section name> 无效),但它应该给您总体思路。

<xsl:stylesheet version="2.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="custom">
    <xsl:for-each-group select="section" group-by="element[@name='Folder']">
      <folder name="{current-grouping-key()}">
        <xsl:apply-templates select="current-group()" />
      </folder>
    </xsl:for-each-group>
  </xsl:template>

  <xsl:template match="element[@name='Folder']" />
</xsl:stylesheet>