2010-11-19 154 views
0

我有一個結構的XML像這樣:XSLT轉換XML文檔的格式

<RWFCriteria reportType="ProgramReview"> 
    <item id="36" name="" value="9" type="Milestone" /> 
    <item id="31" name="" value="9" type="Milestone" /> 
    <item id="33" name="" value="11" type="Milestone" /> 
</RWFCriteria> 

,並需要將其轉換爲:

<data> 
    <release id="9"> <milestone id="36" /> <milestone id="31" /> </release> 
    <release id="11"> <milestone id="33" /> </release> 
</data> 

將在XSLT是什麼樣子的這種轉變?

回答

1

您需要根據它們的值屬性對項目進行分組。

<xsl:key name="item-value" match="item" use="@value" /> 

    <xsl:template match="/RWFCriteria"> 

    <data> 
     <xsl:for-each select="item[count(. | key('item-value', @value)[1]) = 1]"> 
     <release id="{@value}"> 
      <xsl:for-each select="key('item-value', @value)"> 
      <milestone id="{@id}" /> 
      </xsl:for-each> 
     </release> 
     </xsl:for-each> 
    </data> 

    </xsl:template> 
+0

@Alejandro感謝固定屬性 – Bronumski 2010-11-19 17:36:51

+0

沒問題:如果你正在使用XSLT 1,你可以使用Muenchian方法,它會看起來像這樣做。 +1爲了一個正確的答案。 (除了我不喜歡嵌套'xsl:for-each') – 2010-11-19 17:44:08

+0

@Alejandro我也沒有,我通常會把東西拿到自己的模板上,但我覺得它更清晰。 – Bronumski 2010-11-19 18:03:21