在XSLT中计算日期差异的错误

时间:2018-05-25 00:44:11

标签: xml xslt xslt-1.0 xslt-2.0

我很难计算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&amp; XSLT here,它工作正常并给我正确的输出。

但是现在当我在SAP MII中存储这个XSLT和XML并运行它的XSLT Transformation Action块时,我得到以下错误:

  

XSL_Transformation_0中未捕获的异常,同时尝试调用从本地变量&#加载的null对象的方法javax.xml.transform.Transformer.transform(javax.xml.transform.Source,javax.xml.transform.Result) 39;处理器&#39;

我真的不确定是怎么回事。有人有线索吗?

由于

1 个答案:

答案 0 :(得分: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变换器运行时,它可以正常工作。