按日期过滤xslt for-each

时间:2015-12-04 15:09:29

标签: xml xslt xpath

我正在尝试使用xslt版本2.0

过滤xml数据

这里有一些示例xml数据(我的数据遵循此模式)

<Messages>
  <Message time="2015-08-06 22:00:11" type="Success">A</Message>
  <Message time="2015-08-07 22:00:07" type="Success">B</Message>
  <Message time="2015-08-07 22:00:15" type="Success">C</Message>
</Messages>

我尝试使用此解决方案XPath query filtering by date,建议我使用translate将日期转换为数字,但我收到一条错误消息(在Visual Studio中)

  

缺少必需的空格

这是我的代码:

<xsl:for-each select="Messages/Message[translate(@time, "- :", "") > translate('2015-08-06 22:00:11', "- :", "")]">

2 个答案:

答案 0 :(得分:1)

您收到错误,因为您尝试在双引号内使用双引号。尝试更改:

<xsl:for-each select="Messages/Message[translate(@time, "- :", "") > translate('2015-08-06 22:00:11', "- :", "")]">

为:

<xsl:for-each select="Messages/Message[translate(@time, '- :', '') > translate('2015-08-06 22:00:10', '- :', '')]">

P.S。如果您使用的是XSLT 2.0,为什么不将这些值作为日期时间进行比较?

答案 1 :(得分:0)

我遇到了类似的问题,试图使用以下内容:

 <xsl:variable select="userCSharp:StringConcat("00")" name="var:v1"/>

它抛出了#34;缺少所需的空白&#34;错误。对我来说,以下解决方案有效:

 <xsl:variable select="userCSharp:StringConcat(&quot;00&quot;)" name="var:v1"/>

它清除了错误并让我的代码编译。