我對 xslt 不是很熟練,但我希望通過 stat name 屬性的值對 xml 中的資料進行排序。
這是我的資料的樣子:
<SeasonStatistics>
<Team name="X" id="000000">
<Player first_name="A">
<Stat name="STATCAT1">42</Stat>
<Stat name="STATCAT2">1</Stat>
<Stat name="STATCAT3">1</Stat>
</Player>
<Player first_name="B">
<Stat name="STATCAT1">187</Stat>
<Stat name="STATCAT2">1</Stat>
<Stat name="STATCAT3">15</Stat>
</Player>
<Player first_name="C">
<Stat name="STATCAT1">92</Stat>
<Stat name="STATCAT2">3</Stat>
<Stat name="STATCAT3">5</Stat>
</Player>
</Team>
以下是輸出的樣子:
<SeasonStatistics>
<Team name="X" id="000000">
<Player first_name="B">
<Stat name="STATCAT1">187</Stat>
<Stat name="STATCAT2">1</Stat>
<Stat name="STATCAT3">15</Stat>
</Player>
<Player first_name="C">
<Stat name="STATCAT1">92</Stat>
<Stat name="STATCAT2">3</Stat>
<Stat name="STATCAT3">5</Stat>
</Player>
<Player first_name="A">
<Stat name="STATCAT1">42</Stat>
<Stat name="STATCAT2">1</Stat>
<Stat name="STATCAT3">1</Stat>
</Player>
</Team>
這是我嘗試過的,但似乎沒有用。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Team">
<xsl:copy>
<xsl:apply-templates select="Player">
<xsl:sort select="Stat"/>
<xsl:sort select="@STATCAT1" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
uj5u.com熱心網友回復:
代替:
<xsl:template match="Team">
<xsl:copy>
<xsl:apply-templates select="Player">
<xsl:sort select="Stat"/>
<xsl:sort select="@STATCAT1" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
嘗試:
<xsl:template match="Team">
<xsl:copy>
<xsl:apply-templates select="Player">
<xsl:sort select="Stat[@name='STATCAT1']" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454054.html
上一篇:Prolog問題{串列}
下一篇:如何就地實作堆排序?
