在过去的一年中,我们一直在运行我编写的批处理脚本,使用Saxon从Windows命令行调用一系列XQuery更新。它在我们使用oXygen 16时工作得很好,但是在我们部门的所有机器都升级到oXygen 17.1之后,脚本现在抛出了一个我似乎无法修复的错误。如有任何意见,不胜感激。
这在安装oXygen 16时是可以工作的:
java -cp "C:Program FilesOxygen XML Editor 16libsaxon9ee.jar" net.sf.saxon.Query -update:on -t -q:"C:Users%USERNAME%DocumentsSVN Working CopiestrunkrbscXSLLocations2015AbID2dsc-items.xq"
我已经确认.jar文件位于相同的相对位置(对路径的唯一更改是oXygen版本号),并且具有与以前相同的名称。然而,在将类路径更新为"C:Program FilesOxygen XML Editor 17libsaxon9ee.jar"之后;脚本抛出以下错误:
Saxon-EE 9.6.0.7J from Saxonica
Java版本1.8.0_92
. lang。UnsupportedOperationException:在这个Saxon配置中不支持XQuery Update
net.sf.saxon.s9api.XQueryCompiler.setUpdatingEnabled (XQueryCompiler.java: 212)
net.sf.saxon.Query.doQuery (Query.java: 281)
net.sf.saxon.Query.main (Query.java: 111)
查询时的致命错误:java.lang.UnsupportedOperationException: XQuery Update is not supported in this Saxon Configuration
文件名、目录名或卷标语法错误。
我的机器上安装了Java 8。我还确保从oXygen编辑器中调用XQuery Update时仍然可以工作。
阅读http://www.saxonica.com/documentation9.6/index.html#!使用-xquery/命令行和http://www.saxonica.com/documentation9.6/index.html#!一致性/更新,我添加了-tree:链接标志和-qversion:1.0标志(它们导致相同的错误消息):
java -cp "C:Program FilesOxygen XML Editor 17libsaxon9ee.jar" net.sf.saxon.Query -qversion:1.0 -tree:linked -update:on -t -q:"C:Users%USERNAME%DocumentsSVN Working CopiestrunkrbscXSLLocations2015AbID2dsc-items.xq"
根据文档,如果设置了-update:on标志,并且使用doc()或collection()函数读取XML,则XQuery Update应该运行,这也是情况——这些是我的XQuery文件中的变量:
declare variable $EAD as document-node()* := doc("sample_input.xml");
declare variable $ITEMS as document-node()* := doc("sample_input.AbID.xml");
我不知道还能尝试什么。如果有人能看到这里出了什么问题,我将非常感谢任何指示!
您是否有自己的Saxon-EE许可证,还是依赖于oXygen附带的许可证?oXygen许可证不包括在oXygen本身之外对Saxon- ee的使用(因此它不包括您从命令行运行Saxon的方式)。也许您发现了oXygen处理Saxon激活方式的漏洞,该漏洞在早期版本中有效,但后来在oXygen或Saxon中得到了修复。