Xml (如何)使用.Net XPath处理在XSLT/XPath中获取当前日期

Xml (如何)使用.Net XPath处理在XSLT/XPath中获取当前日期,xml,xslt,xpath,Xml,Xslt,Xpath,既然MS没有实现Xpath/XSL 2.0,而且它们的Xpath扩展没有包含current-date()函数,那么如何在XSLT中实现这一点呢 注意。我无法控制调用代码,因此无法作为参数传入或设置帮助DLL等 谢谢 马特收到了来自MSDN博客论坛的反馈。在此发布完整性: 嗨,马特 基本上有三种方法可以实现你的需求 将日期作为外部参数传递(请参见此处的详细信息:)–这是一个理想的解决方案,但从您编写的内容来看,这可能是不可能的 在样式表中使用脚本–下面是一个示例 <?xml version=

既然MS没有实现Xpath/XSL 2.0,而且它们的Xpath扩展没有包含current-date()函数,那么如何在XSLT中实现这一点呢

注意。我无法控制调用代码,因此无法作为参数传入或设置帮助DLL等

谢谢
马特收到了来自MSDN博客论坛的反馈。在此发布完整性:

嗨,马特

基本上有三种方法可以实现你的需求

  • 将日期作为外部参数传递(请参见此处的详细信息:)–这是一个理想的解决方案,但从您编写的内容来看,这可能是不可能的

  • 在样式表中使用脚本–下面是一个示例

    <?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>
    
    
    公共字符串Now(){
    return DateTime.Now.ToString(“O”);
    }
    
    这里需要注意的是,如果样式表包含脚本,您应该只加载一次并重用它(出于性能原因,即使您没有脚本,也建议这样做)。原因是,每次加载xslt样式表时,它都会将脚本编译为动态创建的程序集,然后无法卸载该程序集(卸载它们的唯一方法是卸载整个appdomain)。如果应用程序经常这样做,那么最终可能会出现OutOfMemoryException

  • 使用扩展对象–与上面类似,但动态程序集没有问题。以下是有关如何执行此操作的一些详细信息:


  • 从MSDN博客论坛收到此反馈。在此发布完整性:

    嗨,马特

    基本上有三种方法可以实现你的需求

  • 将日期作为外部参数传递(请参见此处的详细信息:)–这是一个理想的解决方案,但从您编写的内容来看,这可能是不可能的

  • 在样式表中使用脚本–下面是一个示例

    <?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>
    
    
    公共字符串Now(){
    return DateTime.Now.ToString(“O”);
    }
    
    这里需要注意的是,如果样式表包含脚本,您应该只加载一次并重用它(出于性能原因,即使您没有脚本,也建议这样做)。原因是,每次加载xslt样式表时,它都会将脚本编译为动态创建的程序集,然后无法卸载该程序集(卸载它们的唯一方法是卸载整个appdomain)。如果应用程序经常这样做,那么最终可能会出现OutOfMemoryException

  • 使用扩展对象–与上面类似,但动态程序集没有问题。以下是有关如何执行此操作的一些详细信息:


  • 看起来您正在限制您的资源…从,似乎有人试图通过扩展的XsltContext类将EXSLT引入.Net XPath/XSLT。看起来您正在限制您的资源…从,似乎有人试图通过扩展的XsltContext类将EXSLT引入.Net XPath/XSLT。