2011-01-27 26 views
1

由於MS沒有實現Xpath/XSL 2.0,並且它們的XPath擴展沒有包含當前日期()函數,因此如何實現這一點在XSLT中?(How)你能否使用.Net XPath處理在XSLT/XPath中獲得當前日期

注意:我沒有調用代碼的控制,所以我不能在作爲參數傳遞或建立一個幫助DLL等

感謝 馬特

+0

它看起來像你限制你的資源... – 2011-01-27 16:43:34

回答

1

收到了來自MSDN博客論壇這一反饋。在這裏張貼的完整性:

嗨馬特,

有基本實現你所需要的3種方式。

  1. 傳遞的日期作爲外部參數(見詳情這裏:http://msdn.microsoft.com/en-us/library/dfktf882(VS.80).aspx) - 這是一個理想的解決方案,但是從你寫它可能無法

  2. 使用樣式表中的腳本 - 在這裏就是一個例子

    <?xml version="1.0" encoding="utf-8"?> 
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:my="put-your-namespace-uri-here"    
    exclude-result-prefixes="msxsl my"> 
    
        <xsl:output method="xml"/> 
    
        <msxsl:script language="C#" implements-prefix="my"> 
        public string Now(){ 
         return DateTime.Now.ToString("O"); 
        } 
        </msxsl:script> 
    
        <xsl:template match="/"> 
        <now> 
         <xsl:value-of select="my:Now()" /> 
        </now> 
        </xsl:template> 
    </xsl:stylesheet> 
    

    的這裏需要注意的是,如果一個樣式表中包含的腳本,你應該只有一次加載和再利用(出於性能原因,建議,即使你沒有腳本)。原因是每次載入一個xslt樣式表時,它都會將腳本編譯爲一個動態創建的程序集,然後不能卸載(卸載它們的唯一方法是卸載整個appdomain)。如果您的應用程序經常這樣做,那麼您最終可能會發生OutOfMemoryException。

  3. 使用擴展對象 - 與上面類似,但您沒有動態程序集的問題。下面是關於如何做到這一點的一些細節:http://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltargumentlist.addextensionobject.aspx

相關問題