<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>
按文件夹分组 文件夹下的部分名称 所有元素名称
E.g。
A11 - 部分名称=“A” - 文件夹,名称,结果值
A12 - 部分名称=“C” - 文件夹,名称,结果值
A13 - 部分名称=“D” - 文件夹,名称,结果值
- 每个Custom ---
也是如此需要以下格式的结果:
<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>
答案 0 :(得分:0)
首先应该从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>