XSLT 1.0(XSLTPROC) - 将日期格式从Yyyy-MM-DDTHH-MM-SSZ转换为Yyyy-MM-DD



输入xml:

<testng-results>
<suite>
<test>
    <class>
        <test-method name="ABC" started-at="2019-03-13T21:26:52Z"></test-method>
        <test-method name="XYZ" started-at="2019-03-13T21:27:15Z"></test-method>
    </class>
</test>
</suite>
</testng-results>

我当前的XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:template match="/">
  <Suite>
 <xsl:for-each select="testng-results/suite/test/class/test-method">
    <test>
       <xsl:attribute name="test_name">
          <xsl:value-of select="@name" />
       </xsl:attribute>
      <start_time>  </start_time>
    </test>
 </xsl:for-each>
  </Suite>

所需的输出.xml:

<Suite>
  <test test_name="ABC">
<start_time>2019-03-13 21:26:52.000 +0000 </start_time>
 </test>
<test test_name="XYZ">
<start_time>2019-03-13 21:26:52.000 +0000 </start_time>
 </test>
</Suite>

我必须从"启动at"值中获取日期,然后将其转换为yyyy-mm-dd HH:mm:ss.sss z格式以生成输出xml。

我尝试使用格式dateTime函数,但是XSLTProc(XSLT 1.0)不支持它。

afaict,您要做的就是用空间替换T,然后附加.000 +0000而不是Z

<start_time>
    <xsl:value-of select="translate(@started-at, 'TZ', ' ')"/>
    <xsl:text>.000 +0000</xsl:text>
</start_time>

没有时区适应的一种相当古怪的方式是以下XSLT-1.0样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="test-method">
    <test test_name="{@name}">
      <start_time><xsl:value-of select="concat(substring-before(@started-at,'T'),' ',substring-before(substring-after(@started-at,'T'),'Z'),'.000 +0000')" /></start_time>
    </test>
  </xsl:template>
  <xsl:template match="/testng-results">
    <Suite>
      <xsl:apply-templates select="suite/test/class/test-method" />
    </Suite>  
  </xsl:template>
</xsl:stylesheet>

其输出是:

<?xml version="1.0"?>
<Suite>
    <test test_name="ABC">
        <start_time>2019-03-13 21:26:52.000 +0000</start_time>
    </test>
    <test test_name="XYZ">
        <start_time>2019-03-13 21:27:15.000 +0000</start_time>
    </test>
</Suite>

P.S。:
输出还纠正了所需的输出XML中的错误:
" XYZ"输入是2019-03-13T21:27:15Z,而不是2019-03-13T21:26:52Z

相关内容

  • 没有找到相关文章