2013-01-18 59 views
3

我試圖讓多個HTML文檔使用XSLT基於答案的XML文檔中的每個用戶:how to apply group by on xslt elements但是沒有更迭。如何使用XSL組數據:對,每個XSL 1.0

XML:

<root> 
    <ArrayOfResult> 
    <Result> 
     <Men> 
     <BowlerResult> 
      <Person> 
      <Name>name 1</Name> 
      </Person> 
      <Data> 
      <Score1>1</Score1> 
      <Score2>1</Score2> 
      <Score3>1</Score3> 
      </Data> 
     </BowlerResult> 
     <BowlerResult> 
      <Person> 
      <Name>name 2</Name> 
      </Person> 
      <Data> 
      <Score1>2</Score1> 
      <Score2>2</Score2> 
      <Score3>2</Score3> 
      </Data> 
     </BowlerResult> 
     </Men> 
     <Women> 
     <BowlerResult> 
      <Person> 
      <Name>name 3</Name> 
      </Person> 
      <Data> 
      <Score1>3</Score1> 
      <Score2>3</Score2> 
      <Score3>3</Score3> 
      </Data> 
     </BowlerResult> 
     </Women> 
    </Result> 
    <Result>...</Result> 
    </ArrayOfResult> 
    <ArrayOfResult>...</ArrayOfResult> 

人可以在更多的聯賽

我想達到的目標: 每個人(不同的人/名稱),我想從所有「BowlerResult」積累數據元素

的XSLT我現在所擁有的:

<xsl:key name="keyPerson" match="BowlerResult" use="Person/Name" /> 

<xsl:template match="text()" /> 

<xsl:template match="/root"> 
    <root> 
    <xsl:apply-templates /> 
    </root> 
</xsl:template> 

<xsl:template 
match="BowlerResult[generate-id(.)=generate-id(key('keyPerson',Person/Name)[1])]"> 
    <Person value="{Person/Name}"> 
    <xsl:for-each select="key('keyPerson', Person/Name)"> 
     <Result> 
     <id> 
      <xsl:value-of select="Person/Name" /> 
     </id> 
     </Result> 
    </xsl:for-each> 
    </Person> 
</xsl:template> 

但這隻給了我第一個人的迭代。

回答

4

您的XSLT有一堆問題,但這裏的主要問題是第一個模板的路徑與任何內容都不匹配(TeamResult不是直接位於根目錄下,也沒有Result元素,並且該鍵名爲「keyPerson」,而不是「keyBowler」。

這XSLT成功組球員曾經每名球員。你能不能給它一個嘗試?(注:實際輸入XML使用元素名稱BowlerResult和鮑勒)

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

    <xsl:key name="keyPerson" match="BowlerResult" use="Bowler/Name" /> 

    <xsl:template match="text()" /> 

    <xsl:template match="/root"> 
    <root> 
     <xsl:apply-templates /> 
    </root> 
    </xsl:template> 

    <xsl:template 
    match="BowlerResult[generate-id(.)=generate-id(key('keyPerson',Bowler/Name)[1])]"> 
    <xsl:variable name="name" select="Bowler/Name" /> 
    <Person value="{$name}"> 
     <xsl:for-each select="key('keyPerson', $name)"> 
     <Result> 
      <id> 
      <xsl:value-of select="$name" /> 
      </id> 
     </Result> 
     </xsl:for-each> 
    </Person> 
    </xsl:template> 


</xsl:stylesheet> 
+0

感謝您指出的錯字。我稍微改變爲清晰起見,XML和忘記一些,我會看看你的XSLT和取回它儘快。 – amaters

+0

我試圖將它加到你給我的東西上。現在結果是空的。 如果你想檢查他們,我在網上發佈了這些文件: http://www.hoedinie.nl/stack/Xml/Complete.xml http://www.hoedinie.nl/stack/Xslt/Players.xslt – amaters

+0

它在修改之前是否輸出數據?如果是這樣,你能告訴我們你的修改版嗎? – JLRishe