料青山看我應(yīng)如是
2022-08-17 15:54:01
我正在嘗試從java運行Saxon HE,使用可以在Saxon資源中找到的代碼。我嘗試更改它,以便它不會從java代碼創(chuàng)建附加文件,而是讓xslt文件通過使用“結(jié)果文檔”來執(zhí)行此操作。我的xslt確實在Altova XMLSpy中按預(yù)期工作,但我想看看我是否可以讓Saxon做同樣的事情 - 沒有運氣,除了巨大的頭部疼痛和大量的挫折感,以及很多希望Python在不久的將來會得到支持......我收到以下錯誤消息:主體輸出文件的系統(tǒng)標識符未知。當我谷歌搜索它時,我發(fā)現(xiàn)一個答案,即找不到基礎(chǔ)uri,但無處可見如何設(shè)置基礎(chǔ)uri...所以我的第一個問題是:基礎(chǔ)uri集在哪里?它是在 java 類中還是在 xslt 文件中?我無法看到在xslt文件中設(shè)置它的位置,所以我的猜測是我必須將其設(shè)置為編譯器/轉(zhuǎn)換器的屬性?A其他問題是關(guān)于結(jié)果文檔的實際 href 屬性。如果我想指向相對路徑,語法是什么,也許一個例子會是什么樣子?那么絕對路徑呢?在Altova中工作的文件中,我以某種方式獲取要轉(zhuǎn)換的源xml文件的基uri,然后將輸出定向到相對目錄。在 Saxon 中,base uri 似乎獲取了 xslt 文件的位置...不知道為什么會這樣。設(shè)置絕對路徑時,我收到一個錯誤,指出我正在使用未知協(xié)議。所以我在路徑之前輸入了“file:///”?,F(xiàn)在,我收到一條警告,抱怨文檔在連接xslt文件路徑的路徑上不可用,以及我在轉(zhuǎn)換期間使用的查找路徑。如您所見,我在這里到處都是,因此非常感謝一些指南和幫助。
1 回答

動漫人物
TA貢獻1815條經(jīng)驗 獲得超10個贊
有兩個用于運行 Saxon 轉(zhuǎn)換的 API,您還沒有說出您正在使用哪個 API。
無論哪種方式,xsl:result-document 的 href 屬性中使用的相對 URI 都會相對于轉(zhuǎn)換的“基本輸出 URI”進行解析。
如果您使用的是 JAXP 轉(zhuǎn)換 API,則它是為 XSLT 1.0 設(shè)計的,XSLT 1.0 不識別基本輸出 URI 的概念。因此,Saxon 使用提供的 JAXP Result 對象的 SystemID 作為轉(zhuǎn)換的目標。如果 JAXP Result 對象沒有系統(tǒng) ID,例如,如果您提供了未指定系統(tǒng) ID 的 DOMResult 或 StreamResult,則可能會收到錯誤。
相比之下,s9api API 是為 XSLT 2.0 設(shè)計的(擴展為 3.0),因此其 XsltTransformer 對象具有顯式方法。setBaseOutputURI()
如果您做了某件事并且沒有成功,那么請確切地告訴我們您做了什么以及它是如何失敗的,然后我們可以幫助您下次正確。很難調(diào)試我們看不到的代碼。
添加回答
舉報
0/150
提交
取消