2014-09-22 85 views
0

我已經爲此搜索了stackoverflow,但某種程度上沒有找到適合我的示例。當談到xslt時我不是特別熟練。我想改變給定的XML:xslt 1.0按節點屬性進行分組並輸出爲html

<ROOT> 
    <LIST id="1" name="list1"> 
     <ITEM rowNumber="1" data="list1row1" name="firstRow"> 
     </ITEM> 
     <ITEM rowNumber="2" data="list1row2" name="secondRow"> 
     </ITEM> 
     <ITEM rowNumber="3" data="list1row3" name="thirdRow"> 
     </ITEM> 
    </LIST> 
    <LIST id="2" name="list2"> 
     <ITEM rowNumber="1" data="list2row1" name="firstRow"> 
     </ITEM> 
     <ITEM rowNumber="2" data="list2row2" name="secondRow"> 
     </ITEM> 
     <ITEM rowNumber="3" data="list2row3" name="thirdRow"> 
     </ITEM> 
    </LIST> 
    <LIST id="3" name="list3"> 
     <ITEM rowNumber="1" data="list3row1" name="firstRow"> 
     </ITEM> 
     <ITEM rowNumber="2" data="list3row2" name="secondRow"> 
     </ITEM> 
     <ITEM rowNumber="3" data="list3row3" name="thirdRow"> 
     </ITEM> 
    </LIST> 
</ROOT> 

進入這個HTML:

<table> 
    <tr> 
     <td>1</td> 
     <td>firstRow</td> 
     <td id="list1_row1">list1row1</td>   
     <td id="list2_row1">list2row1</td>   
     <td id="list3_row1">list3row1</td> 
    </tr> 
    <tr> 
     <td>2</td> 
     <td>secondRow</td> 
     <td id="list1_row2">list1row2</td>   
     <td id="list2_row2">list2row2</td>   
     <td id="list3_row2">list3row2</td> 
    </tr> 
    <tr> 
     <td>3</td> 
     <td>thirdRow</td> 
     <td id="list1_row3">list1row3</td>   
     <td id="list2_row3">list2row3</td>   
     <td id="list3_row3">list3row3</td> 
    </tr> 
</table> 

所以我想利用所有行,並將它們組合在一起的錶行,包含行號,名稱細胞和數據。如果rowNumber和name是隱藏的單元格,那就好了。

我想用<xsl:if test="position() = 1">來檢查是否顯示元數據(行號和名稱)。單元格將具有列表名(或id)和行號(因此可以用javascript搜索)的ID。

謝謝您提前提供的所有幫助!

回答

2

假設每個列表具有相同數量的項(即行),嘗試這種方式:

XSLT 1.0

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

<xsl:key name="item-by-row" match="ITEM" use="@rowNumber"/> 

<xsl:template match="/"> 
    <table> 
     <xsl:for-each select="ROOT/LIST[1]/ITEM"> 
      <tr> 
       <td><xsl:value-of select="@rowNumber"/></td> 
       <td><xsl:value-of select="@name"/></td> 
       <xsl:for-each select="key('item-by-row', @rowNumber)"> 
        <td id="{../@name}_row{@rowNumber}"><xsl:value-of select="@data"/></td>  
       </xsl:for-each> 
      </tr> 
     </xsl:for-each> 
    </table> 
</xsl:template> 

</xsl:stylesheet> 
+0

作品就像一個魅力。謝謝你,先生!我還使用http://www.xsltcake.com/來幫助我進一步修改這個例子以適應我的情況。 – avidenic 2014-09-23 07:08:16