2017-10-16 147 views
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分組。如果你沒有顯示你嘗試過的東西,那麼很多問題的答案都可以認爲你試圖讓其他人爲你做你的工作。不公平,我知道,但與目前提供的所有證據相容。 –

回答

0

定義爲<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>