我正在嘗試從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:///”?,F在,我收到一條警告,抱怨文檔在連接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
提交
取消