我有一個 XML 檔案
<?xml version="1.0" encoding="UTF-8"?>
<document>
<timeperiods>
<timeperiod>
<day>1</day>
<period>1</period>
</timeperiod>
<timeperiod>
<day>1</day>
<period>2</period>
</timeperiod>
<timeperiod>
<day>2</day>
<period>1</period>
</timeperiod>
<timeperiod>
<day>2</day>
<period>2</period>
</timeperiod>
</timeperiods>
</document>
我正在應用 XSL,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:apply-templates select="/document/timeperiods">
<xsl:sort select="number(period)" data-type="number" order="descending"/>
<xsl:sort select="number(day)" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="timeperiod">
<xsl:value-of select="concat(period, '-', day, ' ')"/>
</xsl:template>
</xsl:stylesheet>
我希望我的模板timeperiod會產生1-1 1-2 2-1 2-2,但它會產生1-1 2-1 1-2 2-2,這是 XML 檔案中的原始順序。
我玩弄了number()函式和屬性data-typeand order,但無論我應用哪種變體,我總是得到相同的結果。
我在這里想念什么?
uj5u.com熱心網友回復:
只有一個名為 的元素timeperiods,對長度為 1 的序列進行排序沒有用處。
您想要對timeperiod元素進行排序,因此您應該選擇這些元素。你沒有給出xsl:apply-templates指令的背景關系;顯然這會影響您選擇它們??的方式。
uj5u.com熱心網友回復:
要獲得您期望的結果,請更改:
<xsl:apply-templates select="/document/timeperiods">
<xsl:sort select="number(period)" data-type="number" order="descending"/>
<xsl:sort select="number(day)" data-type="number" order="descending"/>
</xsl:apply-templates>
到:
<xsl:apply-templates select="/document/timeperiods/timeperiod">
<xsl:sort select="period" data-type="number" order="ascending"/>
<xsl:sort select="day" data-type="number" order="ascending"/>
</xsl:apply-templates>
或者簡單地做:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/document">
<xsl:for-each select="timeperiods/timeperiod">
<xsl:sort select="period" data-type="number" order="ascending"/>
<xsl:sort select="day" data-type="number" order="ascending"/>
<xsl:value-of select="period, day" separator="-"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/477377.html
上一篇:使用T-SQL決議xml資料
下一篇:基于Xpath運算式過濾記錄
