C# XSLT将日期与日期时间的日期部分进行比较
我试图通过XSLT使XML日志文件更具可读性 它在日志中有多个事件,时间为dateTime格式,并且希望选择在特定(单个)日期发生的事件 以下是我的C# XSLT将日期与日期时间的日期部分进行比较,c#,.net,datetime,xslt,xslt-2.0,C#,.net,Datetime,Xslt,Xslt 2.0,我试图通过XSLT使XML日志文件更具可读性 它在日志中有多个事件,时间为dateTime格式,并且希望选择在特定(单个)日期发生的事件 以下是我的log.xml文件的摘录: <event> <bag>168</bag> <action>Check Out</action> <time>2011-04-07T11:41:34.7219171-04:00</time> <u
log.xml
文件的摘录:
<event>
<bag>168</bag>
<action>Check Out</action>
<time>2011-04-07T11:41:34.7219171-04:00</time>
<user>jroderick</user>
</event>
<event>
<bag>168</bag>
<action>Check In</action>
<time>2011-04-07T11:41:38.7079901-04:00</time>
<user>jroderick</user>
</event>
<event>
<bag>1147</bag>
<action>Check In</action>
<time>2011-04-07T14:27:14.0662271-04:00</time>
<user>jholby</user>
</event>
我希望在2.0函数中有一种相当简单的方法来实现这一点,但我一直找不到任何东西
试图将dateTime强制转换为xs:date,但在使用Saxon 9.3 for.Net时没有任何运气
任何帮助都将不胜感激 如果您只想根据日期进行选择,并且您确定日期格式始终是该格式,那么只处理字符串如何?省去了你对约会时间等的担心
<xsl:for-each select="//event[substring(time,1,10) = '2011-04-07']">
<xsl:value-of select="user"/> ...
</xsl:for-each>
...
您甚至可以创建一个模板,如果要在几个地方使用它,还可以在using with param中传递日期。如果您只想根据日期进行选择,并且您确定日期格式始终是该格式,那么只使用字符串如何?省去了你对约会时间等的担心
<xsl:for-each select="//event[substring(time,1,10) = '2011-04-07']">
<xsl:value-of select="user"/> ...
</xsl:for-each>
...
您甚至可以创建一个模板,如果要在几个地方使用它,还可以将日期传递到using with param中。此XSLT 2.0样式表:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:template match="/">
<result>
<xsl:for-each
select="log/event[
xs:date(xs:dateTime(time))
eq
xs:date('2011-04-07-04:00')
]">
<tr>
<td>
<xsl:value-of select="user"/>
</td>
<td>
<xsl:value-of select="time"/>
</td>
<td>
<xsl:value-of select="action"/>
</td>
</tr>
</xsl:for-each>
</result>
</xsl:template>
</xsl:stylesheet>
输出:
<result>
<tr>
<td>jroderick</td>
<td>2011-04-07T11:41:34.7219171-04:00</td>
<td>Check Out</td>
</tr>
<tr>
<td>jroderick</td>
<td>2011-04-07T11:41:38.7079901-04:00</td>
<td>Check In</td>
</tr>
<tr>
<td>jholby</td>
<td>2011-04-07T14:27:14.0662271-04:00</td>
<td>Check In</td>
</tr>
</result>
约德里克
2011-04-07T11:41:34.7219171-04:00
退房
约德里克
2011-04-07T11:41:38.7079901-04:00
登记入住
霍尔比
2011-04-07T14:27:14.0662271-04:00
登记入住
注意:您的数据采用
xs:dateTime
格式,因此您需要先按此格式转换一定要注意时区此XSLT 2.0样式表:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:template match="/">
<result>
<xsl:for-each
select="log/event[
xs:date(xs:dateTime(time))
eq
xs:date('2011-04-07-04:00')
]">
<tr>
<td>
<xsl:value-of select="user"/>
</td>
<td>
<xsl:value-of select="time"/>
</td>
<td>
<xsl:value-of select="action"/>
</td>
</tr>
</xsl:for-each>
</result>
</xsl:template>
</xsl:stylesheet>
输出:
<result>
<tr>
<td>jroderick</td>
<td>2011-04-07T11:41:34.7219171-04:00</td>
<td>Check Out</td>
</tr>
<tr>
<td>jroderick</td>
<td>2011-04-07T11:41:38.7079901-04:00</td>
<td>Check In</td>
</tr>
<tr>
<td>jholby</td>
<td>2011-04-07T14:27:14.0662271-04:00</td>
<td>Check In</td>
</tr>
</result>
约德里克
2011-04-07T11:41:34.7219171-04:00
退房
约德里克
2011-04-07T11:41:38.7079901-04:00
登记入住
霍尔比
2011-04-07T14:27:14.0662271-04:00
登记入住
注意:您的数据采用
xs:dateTime
格式,因此您需要先按此格式转换请注意时区确认我最初应该考虑将其转换为xs:dateTime。太棒了,阿莱杰@Jimmerz28:我很高兴它对我有帮助。我本应该想到最初投到xs:dateTime的。太棒了,阿莱杰@Jimmerz28:我很高兴这对我有帮助。