Saxon 10 HE - 每个 Java 扩展类是否需要一个命名空间?

问题描述

我正在从 Saxon9 迁移到 Saxon10 HE。我当前的 XSL 文件包含一个命名空间,它指向我在其中定义了多个函数的类。

然后我使用语法调用我的函数

common_namespace:function_name

使用 Saxon10 HE,我为每个函数定义了一个命名空间,因为每个函数都在自己的类中声明

因此,对于 Saxon10,我使用类的名称来声明每个函数

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 类名之间没有联系。您可以随意命名您的函数。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...