我正在尝试从java运行Saxon HE,使用可以在Saxon资源中找到的代码。我尝试更改它,以便它不会从java代码创建附加文件,而是让xslt文件通过使用“结果文档”来执行此操作。我的xslt确实在Altova XMLSpy中按预期工作,但我想看看我是否可以让Saxon做同样的事情 - 没有运气,除了巨大的头部疼痛和大量的挫折感,以及很多希望Python在不久的将来会得到支持......我收到以下错误消息:主体输出文件的系统标识符未知。当我谷歌搜索它时,我发现一个答案,即找不到基础uri,但无处可见如何设置基础uri...所以我的第一个问题是:基础uri集在哪里?它是在 java 类中还是在 xslt 文件中?我无法看到在xslt文件中设置它的位置,所以我的猜测是我必须将其设置为编译器/转换器的属性?A其他问题是关于结果文档的实际 href 属性。如果我想指向相对路径,语法是什么,也许一个例子会是什么样子?那么绝对路径呢?在Altova中工作的文件中,我以某种方式获取要转换的源xml文件的基uri,然后将输出定向到相对目录。在 Saxon 中,base uri 似乎获取了 xslt 文件的位置...不知道为什么会这样。设置绝对路径时,我收到一个错误,指出我正在使用未知协议。所以我在路径之前输入了“file:///”。现在,我收到一条警告,抱怨文档在连接xslt文件路径的路径上不可用,以及我在转换期间使用的查找路径。如您所见,我在这里到处都是,因此非常感谢一些指南和帮助。
1 回答
动漫人物
TA贡献1815条经验 获得超10个赞
有两个用于运行 Saxon 转换的 API,您还没有说出您正在使用哪个 API。
无论哪种方式,xsl:result-document 的 href 属性中使用的相对 URI 都会相对于转换的“基本输出 URI”进行解析。
如果您使用的是 JAXP 转换 API,则它是为 XSLT 1.0 设计的,XSLT 1.0 不识别基本输出 URI 的概念。因此,Saxon 使用提供的 JAXP Result 对象的 SystemID 作为转换的目标。如果 JAXP Result 对象没有系统 ID,例如,如果您提供了未指定系统 ID 的 DOMResult 或 StreamResult,则可能会收到错误。
相比之下,s9api API 是为 XSLT 2.0 设计的(扩展为 3.0),因此其 XsltTransformer 对象具有显式方法。setBaseOutputURI()
如果您做了某件事并且没有成功,那么请确切地告诉我们您做了什么以及它是如何失败的,然后我们可以帮助您下次正确。很难调试我们看不到的代码。
添加回答
举报
0/150
提交
取消