XSLT日期天数差计算在SAP MII中执行报错求助
SAP MII XSLT Transformation Error: Null Transformer Processor When Calculating Date Differences
我之前在SAP MII里调试XSLT时也碰到过类似的null处理器报错,结合你的情况,大概率是XSLT版本兼容性或者SAP MII配置的问题,咱们一步步来解决:
核心原因:XSLT 2.0语法不被SAP MII默认支持
你在线测试的工具(xsltransform.net)支持XSLT 2.0,所以days-from-duration、xs:date这类2.0特性能正常运行,但SAP MII默认使用的是Xalan这类XSLT 1.0处理器,它识别不了2.0的语法,导致无法初始化Transformer,就出现了null object loaded from local variable 'processor'的错误。
解决方案1:改用XSLT 1.0兼容的日期差计算方式
既然SAP MII只认1.0,咱们就用Xalan的扩展函数xalan:days-between来替代,同时把XSLT版本声明改成1.0。修改后的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="1.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> <!-- 使用Xalan扩展函数计算两个日期的天数差 --> <xsl:value-of select="xalan:days-between(xs:date(CreationDate), xs:date('2018-05-24'))"/> </DateDiff> </Row> </xsl:for-each> </Rowset> </Rowsets> </xsl:template> </xsl:stylesheet>
解决方案2:检查SAP MII XSLT Action的配置
除了语法问题,还要确认你的XSLT Transformation Action有没有正确配置:
- 确保XSLT文件已经上传到SAP MII的Content Repository,路径填写正确(比如
/XSLT/YourTransform.xsl) - 检查文件的权限,确保SAP MII的运行用户有读取该文件的权限
- 避免在XSLT里使用SAP MII不支持的第三方扩展或命名空间
额外提示:自定义日期计算模板(如果扩展函数不可用)
如果Xalan的扩展函数也用不了,你可以自己写一个XSLT 1.0的日期差计算模板,把日期拆成年、月、日,手动计算天数差。不过这种方式比较繁琐,优先用上面的扩展函数方案。
内容的提问来源于stack exchange,提问作者Soham Shah
相关产品推荐
相关产品推荐

