2009-11-22 36 views
1

我想要找出两个日期(以分钟为单位)出现在使用XSLT的XML文件中的两个不同元素之间的区别。我不能使用这个功能,因为我使用的是Visual Studio 2008,在版本1.0中不支持XSLT功能..处理日期差异

Ex - 11/12/2009 12:00 AM 12/01/2010 12:00 PM我也必须一直看到date2> date1。提前Thanx。

虽然我已经成功地在一定程度上做了类似(但比较小)的计算。(使用模板将它们当作字符串处理)..我终于可以得出结论。“模板”不能代替“函数”,但我的应用程序的问题是它可以很容易地与Visual Studio接口,而不是任何其他应用程序,(这个接口必须做许多其他功能而不是触发XSL转换),所以除了visual studio之外,没有其他应用程序可以使用。

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

回答

2

如果通过“Visual Studio 2008”实际上意味着.NET和XslCompiledTransform,那么处理此问题的最简单方法是使用其scripting extension来嵌入一些C#代码来处理此问题。例如:

<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> 
+0

ThanQ很多帕维尔先生 – 2009-12-08 10:07:05

2

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

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

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

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

+0

哎添,非常感谢您mcuh ..这是真正有用的信息和后.. – 2009-11-22 18:08:03

+0

虽然我已经成功做类似(但comparitively小)计算在一定程度上。(把他们当作字符串我可以最终得出结论:“模板”不能代替“功能”,但我的应用程序的问题是它可以很容易地与Visual Studio接口比任何其他应用程序,(好吧,这个接口必须除了触发XSL转换之外,还有许多其他功能),所以除了visual studio之外,没有其他应用程序可以使用。 – 2009-11-22 18:09:24

+0

有一个网站名为exslt.com,我从那里下载了一个现成的模板..但无法让我的方式工作..所以我发布了这个问题,不期待有人发布完整的解决方案,但如果发现任何其他的替代方法..就像使用一些其他语言(C#等)以及XSLT .. 感谢您的回复 – 2009-11-22 18:11:02