XSLT 1.0 获取当前日期时间

发布于 2025-01-07 14:55:15 字数 183 浏览 0 评论 0原文

我的 XML 文件中有一个节点包含以下内容:

2011-12-01T16:33:33Z

我希望将此行替换为当前日期,然后时间使用与上面所示相同的格式。

YYYY-MM-DDTHH:MM:SSZ

该节点位于声明为“x”的命名空间内

I have a node in my XML file containing the following:

<Apple>2011-12-01T16:33:33Z</Apple>

I wish to take this line and replace it with the current date and time using the same format as shown above.

YYYY-MM-DDTHH:MM:SSZ

The node is within a namespace declared as 'x'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

江湖彼岸 2025-01-14 14:55:16

您最好将当前数据作为输入 / xsl:param 传递给模板。

XSLT 的目标是成为纯粹的函数式语言;也就是说,所有模板/函数都应符合以下条件:如果使用不会引起副作用的参数调用纯函数,则结果相对于该参数列表是恒定的(有时称为引用透明性),即,如果使用相同的参数再次调用纯函数,将返回相同的结果(这可以启用缓存优化,例如记忆)。

尽管对此有一些解决方法(如InfantPro'Aravind'指出),不建议做这样的事情;如果这样做,您就会破坏 XSLT 最重要的好处之一。

You'll better pass the current data as an input / xsl:param to the template.

The XSLT aims to be purely functional language; that is, all templates / functions should conform to e.g. the following condition: If a pure function is called with parameters that cause no side-effects, the result is constant with respect to that parameter list (sometimes called referential transparency), i.e. if the pure function is again called with the same parameters, the same result will be returned (this can enable caching optimizations such as memoization).

Although there are workarounds on this (as InfantPro'Aravind' pointed out), it is not recommended to do such things; by doing it, you're ruining one of the most significant XSLT benefits.

尬尬 2025-01-14 14:55:15

单独使用 XSLT 1.0 不可能使用 DateTime .. 在类似的情况下,我借助了脚本编写 .. (C#)

示例 XML:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Apple>2011-12-01T16:33:33Z</Apple>
</root>

示例 XSLT:

<?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" exclude-result-prefixes="msxsl" xmlns:cs="urn:cs">
  <xsl:output method="xml" indent="yes"/>
  <msxsl:script language="C#" implements-prefix="cs">
    <![CDATA[
      public string datenow()
     {
        return(DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"));
     }
     ]]>
    </msxsl:script>
      <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Apple">
      <xsl:copy>
      <xsl:value-of select="cs:datenow()"/>
      </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

结果输出:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Apple>2012-02-22T18:03:12Z</Apple>
</root>

该脚本可能驻留在同一个文件中(就像我在我的文件中一样 )示例 XSLT 代码)或者如果触发 XSLTransformation 的代码是 C#,则在调用位置移动相同的代码:)

Playing with DateTime is not possible with XSLT 1.0 alone .. In a similar situations I took help of scripting .. (C#)

Sample XML:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Apple>2011-12-01T16:33:33Z</Apple>
</root>

Sample XSLT:

<?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" exclude-result-prefixes="msxsl" xmlns:cs="urn:cs">
  <xsl:output method="xml" indent="yes"/>
  <msxsl:script language="C#" implements-prefix="cs">
    <![CDATA[
      public string datenow()
     {
        return(DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"));
     }
     ]]>
    </msxsl:script>
      <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Apple">
      <xsl:copy>
      <xsl:value-of select="cs:datenow()"/>
      </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

Resulting Output:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Apple>2012-02-22T18:03:12Z</Apple>
</root>

The script may reside in a same file (like I have it in my sample XSLT code) or if the code triggering XSLTransformation is C# then move the same code in the calling place :)

月牙弯弯 2025-01-14 14:55:15

最好从 XML 引擎传递当前日期时间。在 xsl:stylesheet 中声明 ,并传递来自处理器的值。

It's better to pass current datetime from your XML engine. Declare <xsl:param name="current-datetime"/> in your xsl:stylesheet, and pass the value from processor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文