【发布时间】:2018-02-27 04:27:12
【问题描述】:
我有一个要求,我需要根据日期对不同的 XML 块进行排序并将它们放在不同的标签中。到目前为止,我能够使用数字来实现这一点。但是,每当我尝试按日期对其进行排序时,它都不起作用。我也尝试了不同的数据类型。但未能成功。任何指针都会很棒。
XML:
response status="200">
<classes>
<classdetsils>
<name>Learn12</name>
<date1>20161115</date1>
</classdetsils>
<classdetsils>
<name>Learn12</name>
<date1>20161114</date1>
</classdetsils>
<classdetsils>
<name>Learn13</name>
<date1>20161117</date1>
</classdetsils>
<classdetsils>
<name>Learn14</name>
<date1>20161116</date1>
</classdetsils>
<classdetsils>
<name>Learn15</name>
<date1>20161113</date1>
</classdetsils>
</classes>
</response>
XSLT:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dp="http://www.datapower.com/extensions" extension-element-prefixes="dp" exclude-result-prefixes="dp">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:variable name="vN" select="20161116"/>
<xsl:template match="/">
<test1>
<a>
<xsl:apply-templates select="response/classes/classdetsils[date1 > $vN]" />
<xsl:sort order="ascending" select="date1" data-type="number"/>
</a>
<b>
<xsl:apply-templates select="response/classes/classdetsils[date1 < $vN]" />
<xsl:sort order="ascending" select="date1" data-type="number"/>
</b>
</test1>
</xsl:template>
<xsl:template match="classdetsils">
<name>
<xsl:value-of select="name" />
</name>
<date>
<xsl:value-of select="date1" />
</date>
</xsl:template></xsl:stylesheet>
输出:
<test1 xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<a>
<name>Learn13</name>
<date>20161117</date>
</a>
<b>
<name>Learn12</name>
<date>20161115</date>
<name>Learn12</name>
<date>20161114</date>
<name>Learn15</name>
<date>20161113</date>
</b></test1>
这很好用,因为 date1 字段现在是一个数字。但是,如果我将 date1 的值更改为 XML 中的 xs:date 类型,即:20161115 变为 2016-11-15 并且在 XSLT 中也进行了更改,它似乎不起作用。所以 XML 变成:
response status="200">
<classes>
<classdetsils>
<name>Learn12</name>
<date1>2016-11-15</date1>
</classdetsils>
<classdetsils>
<name>Learn12</name>
<date1>2016-11-14</date1>
</classdetsils>
<classdetsils>
<name>Learn13</name>
<date1>2016-11-17</date1>
</classdetsils>
<classdetsils>
<name>Learn14</name>
<date1>2016-11-16</date1>
</classdetsils>
<classdetsils>
<name>Learn15</name>
<date1>2016-11-13</date1>
</classdetsils>
</classes>
</response>
XSLT 是:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dp="http://www.datapower.com/extensions" extension-element-prefixes="dp" exclude-result-prefixes="dp">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:variable name="vN" select="2016-11-16"/>
<xsl:template match="/">
<test1>
<a>
<xsl:apply-templates select="response/classes/classdetsils[date1 > $vN]" />
<xsl:sort order="ascending" select="date1" data-type="number"/>
</a>
<b>
<xsl:apply-templates select="response/classes/classdetsils[date1 < $vN]" />
<xsl:sort order="ascending" select="date1" data-type="number"/>
</b>
</test1>
</xsl:template>
<xsl:template match="classdetsils">
<name>
<xsl:value-of select="name" />
</name>
<date>
<xsl:value-of select="date1" />
</date>
</xsl:template></xsl:stylesheet>
输出变为空:
<test1 xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<a />
<b /></test1>
我认为我在数据类型方面犯了一些愚蠢的错误。任何指针都会有所帮助。
干杯!
【问题讨论】: