首页 > 解决方案 > 在 XSLT 中计算日期差的错误

问题描述

我有点卡在计算 XSLT 中两个日期之间的差异。

我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<LIST>
    <OUTPUT>
        <LOG>
            <item>
                <DocNo>123456789</DocNo>
                <CreationDate>2018-05-22</CreationDate>
            </item>
            <item>
                <DocNo>111222333</DocNo>
                <CreationDate>2018-05-24</CreationDate>
            </item>
        </LOG>
    </OUTPUT>
</LIST>

我的 XSLT:

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan" version="2.0">
    <xsl:template match="/">
        <Rowsets>
            <Rowset Name="Bulk">
                <xsl:for-each select="LIST/OUTPUT/LOG/item">
                    <Row>
                        <DocumentNo>
                            <xsl:value-of select="DocNo"/>
                        </DocumentNo>
                        <CreationDate>
                            <xsl:value-of select="CreationDate"/>
                        </CreationDate>
                        <DateDiff>
                            <xsl:value-of select="days-from-duration(xs:date(CreationDate) - xs:date('2018-05-24'))"/>
                        </DateDiff>
                    </Row>
                </xsl:for-each>
            </Rowset>
        </Rowsets>
    </xsl:template>
</xsl:stylesheet>

现在,当我在这里运行这个 XML 和 XSLT时,它工作正常并给了我正确的输出。

但是现在当我将此 XSLT 和 XML 存储在 SAP MII 中并运行它 XSLT 转换操作块时,我得到以下错误:

XSL_Transformation_0 未捕获的异常,同时尝试调用从局部变量“处理器”加载的空对象的方法 javax.xml.transform.Transformer.transform(javax.xml.transform.Source, javax.xml.transform.Result)

我真的不确定发生了什么。有人有线索吗?

谢谢

标签: xmlxsltxslt-1.0xslt-2.0

解决方案


根据您包含的xalan命名空间(您的样式表不需要),我推测SAP MII XSLT 转换操作正在使用 Xalan 作为其转换器。

Xalan 似乎只是 XSLT 1.0。当我使用 Xalan 在 Oxygen/XML 中运行您的转换时,我得到:

Severity: fatal
Description: Could not find function: days-from-duration
Start location: 15:119

Severity: fatal
Description: function token not found.
Start location: 15:119

Severity: fatal
Description: java.lang.NullPointerException - null

当我使用 XSLT 2.0 转换器运行时,它工作得很好。


推荐阅读