使用Muenchian分组xslt 1.0

问题描述:

我知道这里有很多关于如何做Muenchian分组的示例,但我一直在尝试很长时间,并没有能够获得它。使用Muenchian分组xslt 1.0

我想根据他们的<title>值使用Muenchian分组来组<spec>

我正在使用XSLT 1.0。

XML:

<product> 
    <specifications> 
     <spec> 
      <title>A</title> 
      <value>val1</value> 
     </spec> 
     <spec> 
      <title>A</title> 
      <value>val2</value> 
     </spec> 
     <spec> 
      <title>B</title> 
      <value>val3</value> 
     </spec> 
     <spec> 
      <title>C</title> 
      <value>val4</value> 
     </spec> 
     <spec> 
      <title>C</title> 
      <value>val5</value> 
     </spec> 
     <spec> 
      <title>D</title> 
      <value>val6</value> 
     </spec> 
    <specifications> 
</product> 

通缉的结果:

<group> 
    <title>A</title> 
    <values> 
     <value>val1</value> 
     <value>val2</value> 
    </values> 
</group> 
<group> 
    <title>B</title> 
    <values> 
     <value>val3</value> 
    </values> 
</group> 
<group> 
    <title>C</title> 
    <values> 
     <value>val4</value> 
     <value>val5</value> 
    </values> 
</group> 
<group> 
    <title>D</title> 
    <values> 
     <value>val6</value> 
    </values> 
</group> 
+2

阅读http://www.jenitennison.com/xslt/grouping/muenchian.html并调整到您的需要。 –

+2

你有什么试过的?如果您不给它一个XSLT样式表,那么您的XSLT处理器就不会正确执行Muenchian分组。如果你没有显示你尝试过的东西,那么很多问题的答案都可以认为你试图让其他人为你做你的工作。不公平,我知道,但与目前提供的所有证据相容。 –

定义为<title>分组密钥。

<xsl:key name="kTitle" match="spec" use="title" /> 

XSL来实现所需的输出

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:strip-space elements="*" /> 

    <xsl:key name="kTitle" match="spec" use="title" /> 

    <xsl:template match="spec[generate-id() = generate-id(key('kTitle', title)[1])]"> 
     <group> 
      <xsl:copy-of select="title" /> 
      <values> 
       <xsl:copy-of select="key('kTitle', title)/value" /> 
      </values> 
     </group> 
    </xsl:template> 

    <xsl:template match="spec" /> 
</xsl:stylesheet> 

输出

<group> 
    <title>A</title> 
    <values> 
     <value>val1</value> 
     <value>val2</value> 
    </values> 
</group> 
<group> 
    <title>B</title> 
    <values> 
     <value>val3</value> 
    </values> 
</group> 
<group> 
    <title>C</title> 
    <values> 
     <value>val4</value> 
     <value>val5</value> 
    </values> 
</group> 
<group> 
    <title>D</title> 
    <values> 
     <value>val6</value> 
    </values> 
</group>