从Java运行时,使Saxon生成新的结果文档

问题描述 投票:0回答:1

我试图使用可以在Saxon资源中找到的代码从java运行Saxon HE。我已经尝试更改它,以便它不会从java代码创建一个aditional文件,而是让xslt文件通过使用“result-document”来完成。

我的xslt确实按照Altova XMLSpy的方式工作,但我想知道我是否可以让撒克逊做同样的事情 - 没有运气,除了大量的头痛和挫折感以及许多希望Python会得到支持有一天...

我收到以下错误消息:主要输出文件的系统标识符是未知的。

当我谷歌它,我找到一个答案,基础uri无法找到,但无处可见如何设置基础uri ...

所以我的第一个问题是:基础uri在哪里设置?是在java类还是在xslt文件中?我无法看到我在xslt文件中设置它的位置,所以我的猜测是我必须将其设置为编译器/变换器的属性?

另一个问题是关于结果文档的实际href属性。如果我想指向一个相对路径,那么语法是什么,也许一个例子会是什么样子?绝对路径怎么样?

在我在Altova中工作的文件中,我以某种方式获取要转换的源xml文件的基本uri,然后将输出定向到相对目录。在Saxon中,基础uri似乎得到了xslt文件的位置......不知道为什么会这样。设置绝对路径时,我收到一条错误,指出我正在使用未知协议。所以我在路径前输入了“file:///”。现在我收到一个警告,抱怨在xslt文件路径连接的路径上没有可用的文档,以及我在转换期间使用的查找路径。

正如你所看到的,我在这里到处都是,所以一些指南和帮助将不胜感激。

java xslt-2.0 saxon
1个回答
0
投票

有两个用于运行Saxon转换的API,您还没有说明您使用的是哪个。

无论哪种方式,xsl:result-document的href属性中使用的相对URI都是相对于转换的“基本输出URI”解析的。

如果您正在使用JAXP转换API,那么它是为XSLT 1.0设计的,它不承认基本输出URI的概念。因此,Saxon使用作为转换目标提供的JAXP Result对象的SystemID。如果JAXP Result对象没有系统ID,例如,如果提供的DOMResult或StreamResult未指定系统ID,则可能会出现错误。

相比之下,s9api API是为XSLT 2.0设计的(扩展为3.0),因此其XsltTransformer对象具有明确的setBaseOutputURI()方法。

如果你做了什么而且它没有用,那么请告诉我们你做了什么以及它究竟是如何失败的,然后我们可以帮助你下次做好准备。调试我们看不到的代码很难。

© www.soinside.com 2019 - 2024. All rights reserved.