我是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>
有人可以帮助我吗?感谢。
答案 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
)date
extension function namespace INSERT INTO ... SELECT ...
注意2:您没有指定使用的处理器,并且并非所有处理器都支持所有EXSLT扩展功能。 Saxon,Xalan-J,libxslt和4XSLT support it以及相同的链接也显示了MSXML实现。
如果因某些原因无法使用EXSLT,请将当前日期/时间作为参数传递给调用应用程序中的样式表。