输入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
。