2009-11-22 32 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