java - 使用 SAXON 转换器工厂转换 XML 不在 Centos AWS 上工作,但在本地工作
问题描述
需要基于一些 XSL 文件使用net.sf.saxon.transformerfactoryimpl转换 XML
XSL 文件是指在 xmlns 部分下的 XSL 中定义的一些扩展函数
xmlns:rad ="http://mywebsite.com/saxon-extension"
当我在本地机器上执行我的代码时,一切正常并且没有错误。当在 AWS centos 中部署相同的代码时没有错误并且转换后的文档不正确。AWS 中的 SAXON 有什么问题吗,centos 我需要启用一些在 XSL 中定义的外部 URL
变压器:
TransformerFactory transformerFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl",null);
if(transformerFactory instanceof net.sf.saxon.TransformerFactoryImpl)
{
Configuration configuration =((net.sf.saxon.TransformerFactoryImpl)transformerFactory).getCOnfiguration();
SaxonExtensionFunctionRegistery.registerAll(configuration);
}
registerALL 方法:
for (class c:extensionFunction)
{
try {
configuration.registerExtensionFunction((ExtensionFunctionDefination)c.newInstance());
}
catch(Exception ex) {
log.error("Error registering extension function:",c.getName(),ex);
}
}
xsl声明及功能:
xmlns:functx="http://www.functx.com" xmlns:rad="http://mywebsite.com/saxon-extension" excluse-result-prefixes="dicom xs rad functx"
<xsl:function name ="dicom:getAccessionNo">
<xsl:param name="dicomNode"/>
<xsl:choose>
<xsl:otherwise>
<xsl:value-of select="dicom:getElement($dicomNode/attr[@tag='00080050'],rad:getResouce('StudyProcessing','unknownLabel'))"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
解决方案
您似乎是不同版本的 Saxon,因此首先要确定您使用的是哪些版本。最可靠的方法是在样式表中(在某个适当的位置)添加一条指令,例如
<xsl:message>Using XSLT processor <xsl:value-of select="system-property('xsl:product-version')"/></xsl:message>
在那之后,我们需要症状的更多细节。您说“没有错误,转换后的文件不正确”:这确实没有任何诊断依据。例如,有可能在其中一种情况下,您使用的 Saxon 版本实现了随后更改的 XSLT 规范之一的草稿版本;魔鬼将在细节中。
您将矛头指向扩展函数,但扩展函数的问题通常以致命错误的形式出现,而不是产生不正确的结果。但是,多年来,调用 Saxon 扩展函数时 XPath 到 Java 数据转换的精确细节已经发生了变化,因此这并非不可能指出问题的可能原因。
推荐阅读
- python - 使用 Tkinter 的 Python GUI 闹钟
- python - 将 python 从 2.7 升级到 3.6 然后再次将 2.7 设置为默认值后,Ubuntu 16.04 终端未打开
- jquery - bootstrap-input-spinner-Angular:如何在下面的代码中添加 24 格式
- node.js - 创建 Webpack 插件时如何设置入口点和对应的输出文件路径?
- flutter - Flutter v2 中 Textfeild 的键盘隐藏底页
- github - GitHub Action: 为 push 和 pull_request 事件设置常见的忽略路径集
- bash - 检查子字符串是否包含在字符串中并且至少包含前 4 个字符
- python - 如果我有它的RGB,如何获取像素的坐标?
- javascript - jquery将多个元素附加到一个div
- directory - 如何在没有“T”的情况下创建目录