将当前日期添加到XML标记中

时间:2015-09-08 10:38:30

标签: xslt

我是xslt的新手,我有问题,我不知道如何解决。 我不得不从我的xml代码中删除空标签。我做到了,它工作正常。 但现在我需要将{ON} ccb:correlationId标记为当前日期(时间戳)。 我的xslt代码:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="*[descendant::text() or descendant-or-self::*/@*[string()]]">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="@*[string()]">
    <xsl:copy/>
</xsl:template>

</xsl:stylesheet>

那是我的xml示例:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ccbs="http://atos.net/ccbs_ba/">
   <soapenv:Header/>
   <soapenv:Body>
      <ccbs:CCBSSaveAccountRequest>
         <ccbs:metric>
            <ccbs:system>
                <ccbs:test3></ccbs:test3>
            </ccbs:system>
            <ccbs:serviceProviderId></ccbs:serviceProviderId>
            <ccbs:correlationId>przyklad</ccbs:correlationId>
         </ccbs:metric>
         <!--Optional:-->
         <ccbs:effectiveTime>null</ccbs:effectiveTime>
         <!--Optional:-->
         <ccbs:status>status</ccbs:status>
      </ccbs:CCBSSaveAccountRequest>
   </soapenv:Body>
 </soapenv:Envelope>

有人可以帮助我吗?感谢。

1 个答案:

答案 0 :(得分:1)

将以下内容添加到样式表(XSLT 2.0,implemented and testable here):

<xsl:value-of select="date:date-time()" />

您的原始代码显示您正在使用XSLT 1.0。如果无法切换到XSLT 2.0或3.0,请使用EXSLT's date-time function

xsl:stylesheet

注1:您需要在ccb根元素上注册以下名称空间:

  • xmlns:ccb="http://atos.net/ccbs_ba/"命名空间与源文档中的相同(即http://exslt.org/dates-and-times
  • 在XSLT 1.0中,EXSLT date extension function namespace INSERT INTO ... SELECT ...
  • 在XSLT 2.0中,默认的函数名称空间是自动设置的,不需要改变它,除非你想使用EXSLT扩展函数。

注意2:您没有指定使用的处理器,并且并非所有处理器都支持所有EXSLT扩展功能。 Saxon,Xalan-J,libxslt和4XSLT support it以及相同的链接也显示了MSXML实现。

如果因某些原因无法使用EXSLT,请将当前日期/时间作为参数传递给调用应用程序中的样式表。