XSLT嵌套分组

时间:2014-01-15 23:31:56

标签: xml xslt group-by xslt-2.0

我在XSLT 2.0中遇到嵌套分组问题。我几乎可以达到预期的效果,但并不完全,而且我对嵌套感到困惑,所以希望能在这里得到一些帮助。

问题是,某些元素有多个产品或主题分类,这适用于主题元素分组,但不适用于产品。我确定这是一个简单的错误,我现在看不到它......

以下是要处理的示例XML文件:

<metadata>
    <file id="1" title="Dimensions">
        <subject>Technical Data</subject>
        <product>A</product>
    </file>
    <file id="2" title="Noise and Vibrations">
        <subject>Technical Data</subject>
        <product>B</product>
    </file>
    <file id="3" title="Overview">
        <subject>Product Description</subject>
        <product>A</product>
        <product>B</product>
    </file>
    <file id="4" title="Main Components">
        <subject>Product Description</subject>
        <subject>Technical Data</subject>
        <product>B</product>
    </file>
</metadata>

这是XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0">

        <xsl:output method="xml" indent="yes"/>
        <xsl:template match="metadata">
            <ul>
                <xsl:for-each-group select="file" group-by="subject">
                    <li>
                        <xsl:value-of select="subject"/>
                        <ul>
                            <xsl:for-each-group select="current-group()" group-by="product">
                                <li>
                                    <xsl:value-of select="product"/>
                                    <ul>
                                        <xsl:for-each select="current-group()">
                                            <li>
                                                <xsl:value-of select="@title"/>
                                            </li>
                                        </xsl:for-each>
                                    </ul>
                                </li>
                            </xsl:for-each-group>
                        </ul>
                    </li>
                </xsl:for-each-group>
            </ul>
        </xsl:template>

</xsl:stylesheet>

这是目前的结果:

<ul>
   <li>Technical Data
      <ul>
         <li>A
            <ul>
               <li>Dimensions</li>
            </ul>
         </li>
         <li>B
            <ul>
               <li>Noise and Vibrations</li>
               <li>Main Components</li>
            </ul>
         </li>
      </ul>
   </li>
   <li>Product Description<ul>
         <li>A B
            <ul>
               <li>Overview</li>
            </ul>
         </li>
         <li>A B
            <ul>
               <li>Overview</li>
               <li>Main Components</li>
            </ul>
         </li>
      </ul>
   </li>
</ul>

但我想要的是这个(A和B产品元素下的“概述”,但B下的“主要组件”):

<ul>
   <li>Technical Data
      <ul>
         <li>A
            <ul>
               <li>Dimensions</li>
            </ul>
         </li>
         <li>B
            <ul>
               <li>Noise and Vibrations</li>
               <li>Main Components</li>
            </ul>
         </li>
      </ul>
   </li>
   <li>Product Description<ul>
         <li>A
            <ul>
               <li>Overview</li>
            </ul>
         </li>
         <li>B
            <ul>
               <li>Overview</li>
               <li>Main Components</li>
            </ul>
         </li>
      </ul>
   </li>
</ul>

1 个答案:

答案 0 :(得分:3)

变化

<xsl:value-of select="product"/>

<xsl:value-of select="current-grouping-key()"/>