处理日期差异

时间:2009-11-22 13:08:30

标签: c# javascript xml xslt

我想找出使用​​XSLT在我的XML文件中出现在两个不同元素中的两个日期(以分钟为单位)之间的差异。我不能使用这个函数,因为我使用的是visual studio 2008,在版本1.0中不支持XSLT函数。

Ex-11/12/2009 12:00 AM 12/01/2010 12:00 PM我也必须始终看到date2> date1。提前完成。

虽然我已经成功地在某种程度上做了相似(但比较小)的计算......(将它们视为字符串)使用模板..我终于可以得出结论......“模板”不能取代“函数”但是我的应用程序的问题是它可以很容易地与Visual Studio接口,而不是任何其他应用程序(嗯,这个接口必须做许多其他功能而不是触发XSL转换)所以毫无疑问使用其他应用程序而不是visual studio。 / p>

有一个名为exslt.com的网站,我从那里下载了一个现成的模板..但是无法让它以我的方式工作..所以我发布了这个Q,不期待有人发布完整的解决方案但是任何如果找到其他替代方式..比如使用其他一些语言(C#,javascript等)和XSLT(但不超出XSLT 1.0)..在此先感谢.. :)

2 个答案:

答案 0 :(得分:2)

如果您说XML文件中的数据格式为11/12/2009 12:00 AM,并且您希望能够与它们进行比较和计算。令人失望的是,我认为你可能不走运。

XSLT 2.0XPath 2.0一起使用xs:datexs:time等类型支持日期和时间。 XSLT 1.0不提供此支持。一些XLST实现以附加功能的形式提供了附加功能,但我看不到Visual Studio 2008提供这些功能的任何证据。此外,正如您所注意到的,如果似乎不允许您定义自己的函数,这可能是解决此问题的另一种方法。

在类似的情况下,我通过以不同的方式将日期/时间信息存储在我的XML文件中来取得进展,这种方式可以由XSLT解释。如果您只想比较日期/时间值以查看哪个更早,则将其存储为日期格式(例如ISO 8601(例如2009-11-22 15:00)将允许您将它们作为字符串进行比较。如果您需要根据差异进行计算,您可能需要使用基于整数的格式,例如Unix time(自1970年以来的秒数)。

或者,寻找支持2.0的其他XSLT工具。

答案 1 :(得分:2)

如果通过“Visual Studio 2008”实际上是指.NET和XslCompiledTransform,那么到目前为止最简单的处理方法是使用其scripting extension嵌入一些C#代码来处理这个问题。 E.g:

<xsl:stylesheet xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:cs="urn:cs">
     <msxsl:script language="C#" implements-prefix="cs">
     <![CDATA[
         public int MinutesBetween(string d1, string d2) {
             return (DateTime.Parse(d1) - DateTime.Parse(d2)).Minutes;
         }
     ]]>
     </msxsl:script>

     ...

     <xsl:value-of select="cs:MinutesBetween($d1, $d2)" />

</xsl:stylesheet>