2011-11-08 29 views
0

我有這樣的XML數據:創建XSLT爲組數據

<data ItemCount="5"> 
<zrow GroupName="Manager"User="User1" /> 
<zrow GroupName="Developer"User="User2" /> 
<zrow GroupName="Manager"User="User3" /> 
<zrow GroupName="CEO"User="User4" /> 
<zrow GroupName="CEO"User="User5" /> 
</data> 

我想這樣的輸出:

Manager 

User1 

User3 

Developer 

User2 

CEO 

User4 

User5 

什麼應該是我的XSLT?我想創建一個XSLT,它應該將我的數據轉換爲上述格式。你能幫我創建一個嗎?

+0

哪個XSLT的版本? –

回答

1

的XSLT 2.0溶液:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 
    <xsl:template match="data"> 
     <xsl:for-each-group select="zrow" group-by="@GroupName"> 
      <xsl:value-of select="current-grouping-key()" /> 
      <xsl:text>&#xa;</xsl:text> 
      <xsl:value-of select="current-group()/@User" separator="&#xa;"/> 
      <xsl:text>&#xa;</xsl:text> 
     </xsl:for-each-group> 
    </xsl:template> 
</xsl:stylesheet> 

的XSLT 1.0解決方案依賴於Muenchian方法:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:key name="byGroupName" match="zrow" use="@GroupName"/> 
    <xsl:template 
     match="zrow[generate-id()= 
        generate-id(key('byGroupName', @GroupName)[1])]"> 
     <xsl:value-of select="@GroupName"/> 
     <xsl:text>&#xa;</xsl:text> 
     <xsl:apply-templates select="key('byGroupName', @GroupName)" mode="out"/> 
    </xsl:template> 
    <xsl:template match="zrow" mode="out"> 
     <xsl:value-of select="@User"/> 
     <xsl:text>&#xa;</xsl:text> 
    </xsl:template> 
    <xsl:template match="zrow"/> 
</xsl:stylesheet> 
+0

你可以給出輸出爲HTML嗎? – NICK

+0

這適用於如果我的GroupName字段填充了一些值。如果GoupName的值沒有任何值,你能否更新代碼來管理? – NICK

+0

@NICK - SO上有很多很多的分組問題。這是最常見的問題之一。我建議您搜索關於Muenchian方法(如果您使用XSLT 1.0)或一般分組的更多信息。找到很多好的例子你應該沒有問題。作爲一個提示,使用其他HTML元素來包裝諸如''這樣的行應該非常簡單:'

  • ' –