当前位置: 首页 > 工具软件 > Saxon > 使用案例 >

java saxon,如何在Java中将Saxon设置为Xslt处理器?

况胡媚
2023-12-01

小编典典

有多种方法可以执行此操作(按查找优先级顺序):

直接实例化

显式实例化Saxon工厂(对Michael在上面的评论致意):

TransformerFactory fact = new net.sf.saxon.TransformerFactoryImpl()

这种方法意味着您的代码在编译时被锁定为无法使用Saxon。 这可以看作是优势(没有风险使用错误的处理器运行)或劣势(没有机会在执行时配置其他处理器-

甚至没有Saxon Enterprise Edition)。

对于Saxon-PE,替代com.saxonica.config.ProfessionalTransformerFactory。对于Saxon-

EE,替代com.saxonica.config.EnterpriseTransformerFactory。

指定班级名称

在构造工厂类时指定它:

TransformerFactory fact = TransformerFactory.newInstance(

"net.sf.saxon.TransformerFactoryImpl", null);

这种方法使您可以在执行时选择处理器,同时仍然避免了类路径搜索的成本和风险。

例如,您的应用程序可以提供一些配置机制,以通过在各种Saxon工厂类之间进行选择来使其与不同的Saxon版本一起运行。

使用系统属性

javax.xml.transform.TransformerFactory在创建实例之前设置系统属性:

System.setProperty("javax.xml.transform.TransformerFactory",

"net.sf.saxon.TransformerFactoryImpl");

或在命令行上(为便于阅读而中断行):

java -Djavax.xml.transform.TransformerFactory=

cnet.sf.saxon.TransformerFactoryImpl YourApp

这种方法的缺点是系统属性会影响整个Java VM。

设置此属性以选择Saxon可能意味着您甚至可能不知道的应用程序中的其他模块开始使用Saxon而不是Xalan,并且如果该模块使用特定于Xalan的XSLT构造,则该模块可能会失败。

使用属性文件

创建以下文件:

JRE/lib/jaxp.properties

具有以下内容:

javax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl

这种方法具有与使用系统属性相似的结果。

服务加载器

在CLASSPATH上的任何JAR中创建以下文件:

META-INF/services/javax.xml.transform.TransformerFactory

具有以下内容:

net.sf.saxon.TransformerFactoryImpl

这种方法的缺点是,对类路径进行小的更改可能会导致应用程序使用其他XSLT引擎运行,而该引擎可能从未经过过测试。

平台默认

如果以上都不做,则将TransformerFactory加载平台默认实例。在此处可以找到对该可插入性层的友好描述。

请注意,此处的“平台”是指Java VM,而不是其运行的硬件或操作系统。 对于所有当前已知的Java VM,平台默认为Xalan版本(仅支持XSLT

1.0)。无法保证将来所有Java VM都会如此。

我认为这个答案是反对Java做事的一种说法。

2020-10-18

 类似资料: