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

Xslt 将当前日期添加到XML标记中,xslt,Xslt,我是xslt的新手,我有一个不知道如何解决的问题。 我必须从xml代码中删除空标记。我做到了,效果很好。 但现在我只需要在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" in

我是xslt的新手,我有一个不知道如何解决的问题。 我必须从xml代码中删除空标记。我做到了,效果很好。 但现在我只需要在
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>

普济克拉德
无效的
地位

有人能帮我吗?谢谢。

在样式表(XSLT 2.0,)中添加以下内容:


您的原始代码显示您正在使用XSLT1.0。如果无法切换到XSLT 2.0或3.0,请使用:


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

  • ccb
    名称空间,以匹配源文档中的相同名称空间(即
    xmlns:ccb=”http://atos.net/ccbs_ba/“
  • 在XSLT1.0中,
    http://exslt.org/dates-and-times
  • 在XSLT2.0中,默认函数名称空间是自动设置的,无需更改,除非您想使用EXSLT扩展函数
注意2:您没有指定您使用的处理器,并且并非所有处理器都支持所有EXSLT扩展功能。Saxon、Xalan-J、libxslt和4XSLT以及同一链接也显示了MSXML实现


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

嘿,我收到错误消息“确保xsl是否有效(…)。我可以升级到2.0版本。但在尝试使用2.0版本的代码时,我仍然收到一个以前说过的错误。。我收到一个错误,ccb名称空间未声明。怎么做?@maciek2791:这是我第一个注释中的第一条注释。您需要将其添加到
xsl:stylesheet
元素中,就像您对exslt名称空间和其他na所做的那样Messpaces。我仍然想知道你在使用什么处理器……嘿,Abel,我编辑了我的第一个代码。请看。@maciek2791另外,我有一个打字错误,
ID
ID
,默认优先级低于谓词匹配。两者都修复了上面的问题。我无法重新编辑你的空白,结果显示XML,请参阅:(包括你的代码)您使用的是哪个XSLT处理器?很抱歉我犯了错误。我更改了元素的名称:ccbs:correlationId。同样的错误发生了…如何检查我使用的处理器?“如何检查我使用的处理器?”
<xsl:template match="ccb:correlationId" priority="5">
    <xsl:copy>
        <!-- in case you have attributes (not in your source) -->
        <xsl:apply-templates select="@*" />
        <!-- in case you need to keep current value as well -->
        <xsl:value-of select="." />
        <!-- current date/time -->
        <xsl:value-of select="current-dateTime()" />
    </xsl:copy>
</xsl:template>
<xsl:value-of select="date:date-time()" />