1
我有一個xml,我想將其轉換爲另一個xml。尋找2天,並沒有找到我的案例的任何好例子; 2節點汽車和距離。使用xsl進行XML轉換 - 對於每個
對於每個id_car,我必須對距離進行分組(參見下面的輸出xml)。
來源:
<?xml version="1.0" encoding="ISO-8859-1"?>
<output>
<cars>
<car>
<id>1</id>
<brand>Audi</brand>
<type>A4_Quattro</type>
<license>TEST</license>
</car>
<car>
<id>2</id>
<brand>FORD</brand>
<type>XLT_Ranger</type>
<license>PROTOTYPE</license>
</car>
</cars>
<distances>
<distance>
<id_car>1</id_car>
<date>20110901</date>
<distance>123</distance>
</distance>
<distance>
<id_car>1</id_car>
<date>20110902</date>
<distance>194</distance>
</distance>
<distance>
<id_car>2</id_car>
<date>20110907</date>
<distance>24</distance>
</distance>
<distance>
<id_car>2</id_car>
<date>20110915</date>
<distance>105</distance>
</distance>
</distances>
</output>
輸出XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<output>
<cars>
<car>
<id>1</id>
<brand>Audi</brand>
<type>A4_Quattro</type>
<distances>
<distance day="20110901">123</distance>
<distance day="20110902">194</distance>
</distances>
</car>
<car>
<id>2</id>
<brand>FORD</brand>
<type>XLT_Ranger</type>
<license>PROTOTYPE</license>
<distances>
<distance day="20110907">24</distance>
<distance day="20110915">105</distance>
</distances>
</car>
</cars>
<output>
這是幾十個嘗試的結果是:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="Dist_car" match="distances/distance" use="id_car" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<distances>
<xsl:apply-templates select="key('Dist_car', id)"/>
</distances>
</xsl:copy>
</xsl:template>
<xsl:template match="distance">
<distance day="{date}"><xsl:value-of select="distance"/></distance>
</xsl:template>
</xsl:stylesheet>
如果任何人有任何的想法是值得歡迎...非常感謝!
P.S. :我用這個測試xsl http://xslttest.appspot.com/。
上帝,這是美好的!呃...非常感謝!最好的祝願! –
我另一個好奇心:我想計算,對於每一個id_car總距離....然後平均距離:總和(距離)/ NUM ber_of_days ...第一輸出:「 奧迪 A4_Quattro 「認爲你能幫助我嗎? :) –
xpath有一個sum()函數,可以用來總結距離,還有一個count()函數,可以用來計算天數。 xpath中的分區是用'div'運算符而不是斜槓字符編寫的。所以爲了得到你想要的結果,在樣式表中的''元素中加入:'< xsl:value-of select =「sum(key('Dist_car',id)/ distance)div count(key('Dist_car',id)/ distance)」/> ' –