如何在XSLT 1.0中获取执行开始时间和结束时间(UTC格式)?

时间:2015-12-02 11:06:53

标签: xslt xslt-1.0

我需要一个帮助,如何在XSLT转换发生时获得以下详细信息

  1. XSLT的执行开始时间
  2. XSLT的执行开始时间
  3. 均采用UTC格式 - 样本格式 - 2015-12-02T09:41:56Z

    我试过以下方法 1.获取当前日期时间但有以下问题 第1期 我不知道XSLT是如何执行的 - 谷歌搜索找出来 <xsl:value-of select="ex:date-time()"/>

    第2期 我得到以下格式的输出 2015-12-02T16:08:19 + 05:1800000 - 致力于更正格式。

    注意我没有通过命令行运行XSLT的选项。

    源XML

     ` <?xml version="1.0" encoding="UTF-8"?>
    <books>
        <book>
            <xsltExecutionStartTime/>
        </book>
        <book>
            <xsltExecutionEndTime/>
        </book>
    </books>` 
    

    XSLT

    `<?xml version="1.0" encoding="UTF-8"?>  
    <xsl:stylesheet version="1.0"   
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   
                    xmlns:java="http://xml.apache.org/xslt/java"  
                    exclude-result-prefixes="java"  xmlns:ex="http://exslt.org/dates-and-times"      extension-element-prefixes="ex" >  
    
        <xsl:output method="xml" version="4.0" encoding="utf-8" indent="yes"/>
        <xsl:variable name="startTime" select="ex:date-time()"/>
            <xsl:template match = "/">
                <xsltExecutionStartTime><xsl:value-of select="$startTime"/></xsltExecutionStartTime>
                <xsltExecutionEndTime><xsl:value-of select="$endTime"/></xsltExecutionEndTime>
            </xsl:template>
        <xsl:variable name="endTime" select="ex:date-time()"/>
    
    </xsl:stylesheet> `
    

    预期产出

    `<?xml version="4.0" encoding="utf-8"?>
    <xsltExecutionStartTime>2015-12-02T09:41:56Z</xsltExecutionStartTime>
    <xsltExecutionEndTime>2015-12-02T09:41:56Z</xsltExecutionEndTime>
    

    `但我想说的是,我实际上不知道XSLT处理器如何转换XML。即执行的起点和执行的终点。哎呀

    谢谢 问候 -Brijesh

1 个答案:

答案 0 :(得分:0)

在一般情况下,您无法假设xslt-rules的执行顺序。如果您尝试首先在模板匹配/中调用date-time()函数,并在这两个语句之间处理文档的其余部分,您可能会获得所需的结果,但处理器也可能通过提供同一时间两次。

例如(未经测试):

    <xsl:template match = "/">
        <xsltExecutionStartTime><xsl:value-of select="ex:date-time()"/></xsltExecutionStartTime>
        <xsl:apply-templates select="*" />
        <xsltExecutionEndTime><xsl:value-of select="ex:date-time()"/></xsltExecutionEndTime>
    </xsl:template>