xml - 在 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)
我真的不确定发生了什么。有人有线索吗?
谢谢
解决方案
根据您包含的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 转换器运行时,它工作得很好。
推荐阅读
- python - 在 Pyomo (Python) 中列出两个索引
- reactjs - 无法从 React.Component 静态函数中读取未定义的属性“已检查”
- html - 圆角表格行之间的空间
- google-cloud-ml - Google Cloud ML 使用对象检测模型返回空预测
- identityserver4 - 允许使用 JWT Claim 访问多个公司
- mysql - 由于数据类型,“字段列表”中的未知列“”
- python - 从列表连接到for循环的格式化字符串(python)
- apache-spark - AWS Glue 与 AWS EMR - 在 Spark 作业中覆盖 S3 文件
- javascript - 如何在 Angular 5 的一个组件中使用多个模板 URL?
- c++ - 获取csv文件中行数的最快方法是什么?