这是一个简单的问题,但我找不到答案。我正在尝试使用Java处理XSLT 2.0样式表。它依赖于Saxon的XSL元素。
我当前的班级可以在简单的XSLT 1.0上正常工作,但是在用Saxon构建的2.0 XSLT上出现无法识别元素的错误。
我不知道如何告诉Java将Saxon用作处理器。我在课堂上使用javax.xml.transform。这是我可以设置的属性吗?我该怎么设置?谢谢!
编辑后, 我弄清楚了如何设置该属性以使用Saxon,但是现在出现此错误。
Provider net.sf.saxon.TransformerFactoryImpl not found
如何在我的应用程序中包含Saxon?
有多种方法可以执行此操作(按查找优先级顺序):
显式实例化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);
注意:从Java
6开始可用
。在Java
5的版本没有此方法。
这种方法使您可以在执行时选择处理器,同时仍然避免了类路径搜索的成本和风险。
例如,您的应用程序可以提供一些配置机制,以通过在各种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做事的一种说法。
我必须使用 XSLT 2.0 处理器来实现字符串操作函数,如 我在 POM 文件中添加了撒克逊的依赖项并运行了“mvn install”命令。通过执行此操作,“saxon-9.1.0.8.jar”被添加到“引用的库”文件夹下。 在代码中,我使用了 当我尝试调用下面一行< code > transformer factory . new instance(" net . SF . Saxon . t
问题内容: 我可以如下设置Firefox的代理设置。 但是我也需要设置Chrome。.有人可以帮助我怎么做吗? 谢谢拉吉 问题答案: 您可以尝试使用该类,如下所示:
问题内容: 谁能建议我如何将.TIF格式的图像存储到该图像并将其添加到列表模型?我试过了,但是给了我。 在这里,我编辑了代码,这是我的错误msg 异常,位于ListImage1.main(ListImage1.java:48)的javax.swing.ImageIcon。(ImageIcon.java:228)的线程“ main”中java.lang.NullPointerException 问题
代码只是简单地将我的变量名设置为字符串“null”,所以我不知道如何让程序等待输入。编译器不允许我在不初始化变量的情况下声明它。
问题内容: 我从这里获得了XSLT:http : //andrewjwelch.com/code/xslt/csv/csv-to- xml_v2.html 并将CSV文件转换为XML文档。在命令行上与以下命令一起使用时,它将执行此操作: java -jar saxon9he.jar -xsl:csv-to-xml.csv -it:main -o:output.xml 现在,问题变成了: 如何在Ja
主要是从这个问题:XSLT:CSV(或平面文件,或纯文本)到XML 我这里有一个XSLT:http://andrewjwelch.com/code/xslt/csv/csv-to-xml_v2.html 它将CSV文件转换为XML文档。当与命令行上的以下命令一起使用时,它会这样做: java-jar saxon9he。jar-xsl:csv到xml。csv-it:main-o:output。xml