我正在尝试使用可在Saxon资源中找到的代码从Java运行Saxon HE。我尝试过更改它,以便它不会从Java代码创建附加文件,而是通过使用“结果文档”来让xslt文件执行此操作。
我的xslt确实按照Altova XMLSpy的预期工作了,但是我想看看我是否可以让Saxon做同样的事情-那里没有运气,免除了巨大的头痛和无聊的负担以及Python将会获得的很多希望支持这一天很快……
我收到以下错误消息:主体输出文件的系统标识符未知。
当我用google搜索它时,我发现找不到基本uri的答案,但是如何设置基本uri却无处可寻...
所以我的第一个问题是:基本uri设置在哪里?是在Java类中还是在xslt文件中?我在xslt文件中看不到该设置的位置,所以我想我必须将其设置为编译器/变压器的属性吗?
另一个问题是关于结果文档的实际href属性。如果要指向相对路径,语法是什么,也许示例看起来像什么? 那么绝对路径呢?
在Altova中工作的文件中,我以某种方式获取了要转换的源xml文件的基本uri,然后将输出定向到相对目录。在Saxon中,基本uri似乎可以获取xslt文件的位置...不知道为什么会这样。 设置绝对路径时,出现错误,说明我正在使用未知协议。所以我在路径之前输入了“ file:///”。现在,我收到一条警告,抱怨在xslt文件路径和在转换过程中使用的查找路径串联的路径中没有文档可用。
如您所见,我到处都是,所以一些指导和帮助将不胜感激。
答案 0 :(得分:0)
有两个用于运行Saxon转换的API,您尚未说明正在使用哪个。
无论哪种方式,都相对于转换的“基本输出URI”来解析xsl:result-document的href属性中使用的相对URI。
如果您正在使用JAXP转换API,则该API是为XSLT 1.0设计的,该API无法识别基本输出URI的概念。因此,Saxon使用提供的JAXP Result对象的SystemID作为转换的目标。如果JAXP Result对象没有系统ID,例如,如果您提供未指定系统ID的DOMResult或StreamResult,则很可能会出错。
相比之下,s9api API是为XSLT 2.0(具有3.0的扩展名)设计的,因此它的XsltTransformer对象具有显式的setBaseOutputURI()
方法。
如果您做了某些事情而没有成功,那么请告诉我们您所做的事情以及失败的确切原因,然后我们可以帮助您下次正确处理。调试我们看不到的代码很困难。