如何解决Saxon 10 HE - 每个 Java 扩展类是否需要一个命名空间?
我正在从 Saxon9 迁移到 Saxon10 HE。我当前的 XSL 文件包含一个命名空间,它指向我在其中定义了多个函数的类。
common_namespace:function_name
使用 Saxon10 HE,我为每个函数定义了一个命名空间,因为每个函数都在自己的类中声明
functionclassname:function_name
functionclassname:function_name
functionclassname:function_name
etc...
这有效,但这意味着如果不将当前命名空间定义(单数)替换为多个命名空间(每个函数一个),我就无法使用 Saxon10 运行任何基于 Saxon9 的 XSL 文件。
这可能是 Saxon10 HE 的一个限制,但如果有的话,我可以修改我的 Java 代码,以便我可以使用我当前的 XSL 文件,那么这将是最有帮助的。
解决方法
我使用的是开源 Saxon 版本 10 HE 版本。我从以前的开源版本 9 开始。
我的第 9 版 XSL 样式表看起来像 :-
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:c4j="http://www.commander4j.com"
xmlns:c4j_XSLT_Ext="http://xml.apache.org/xalan/java/com.commander4j.Transformation.XSLTExtension"
exclude-result-prefixes="xs c4j c4j_XSLT_Ext" version="2.0">
<xsl:output encoding="UTF-8" indent='yes' method="xml" />
<xsl:strip-space elements="*"/>
对函数的调用看起来像
<dueDate><xsl:value-of select="c4j_XSLT_Ext:date_DD_MMM_YY_to_ISO_Date($due_date)" </dueDate>
<material><xsl:value-of select="c4j_XSLT_Ext:trim($code)"</material>
您应该注意到,两个函数调用只定义了 1 个命名空间 c4j_XSLT_Ext。
我的版本 10 XSL 看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c4j="http://www.commander4j.com"
xmlns:c4j_XSLT_Ext="http://com.commander4j.Transformation.XSLT_Ext"
xmlns:c4j_XSLT_Ext_trim="http://com.commander4j.Transformation.XSLT_Ext_trim"
xmlns:c4j_XSLT_Ext_date_DD_MMM_YY_to_ISO_Date="http://com.commander4j.Transformation.XSLT_Ext_date_DD_MMM_YY_to_ISO_Date"
exclude-result-prefixes="c4j_XSLT_Ext c4j_XSLT_Ext_nvl c4j_XSLT_Ext_date_DD_MMM_YY_to_ISO_Date" version="2.0">
调用一个看起来像的函数
<dueDate><xsl:value-of select="c4j_XSLT_Ext_date_DD_MMM_YY_to_ISO_Date:date_DD_MMM_YY_to_ISO_Date($due_date)" </dueDate>
<material><xsl:value-of select="c4j_XSLT_Ext_trim:trim($code)"</material>
实际上,我有大约 20 个用户定义的 java 函数,而我的 XSL 必须包含 20 个命名空间条目,而不是我以前的 1 个。
,如果您使用“集成扩展函数”(这是 Saxon-HE 中唯一可用的类型),那么命名空间 URI 和 Java 类名之间没有联系。您可以随意命名您的函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。