2011-08-30 84 views
2

轉換某些xml(dita)文檔時,特殊字符,&符和「小於」字符(<)存在問題。但以「&」爲例,發生的情況是由於某種原因在輸出中重複了幾次。事情是,我發現如果&amp;被替換(直接在xml內容中)與&#38;,那麼它工作正常,沒有重複。在DTD中聲明&符號?

我不知道是什麼導致了這種情況,但我想要做的是在DTD中聲明和號以&#38;代替它。我發現谷歌搜索,你應該是這樣做的:

<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd" [ 
<!ENTITY amp "&#38;#38;"> 
]> 

爲簡單起見,我在這裏包括內嵌實體聲明,但我也試圖在實際DTD(concept.dtd)宣佈它。但它不起作用。它似乎沒有啓動,因爲我試圖用<!ENTITY amp "TEST">替換它,只是爲了查看它是否做了任何事情,而沒有。

那麼我該如何做到這一點?我只想將&amp;替換爲&#38;所以我不需要手動替換每個文檔中的每一處...

+1

您正在使用哪個XML解析器?它可能是一個根本不支持內部實體的人 - 這很難符合,但是你去了; 「&」和「<」應該是預定義的,並且即使沒有明確的聲明也是如此。 –

+0

這是DITA Open Toolkit 1.4.3,它使用Saxon 6.5。是的,我知道它應該是預定義的並且可以工作,並且它確實將它變成了&,但不幸的是有多個&的實例。這就是問題......但是如果我用&替換&它不會相乘。 – Anders

+0

您確定要修改正確的DTD嗎?您在下面說過您使用的是oXygen;你有沒有檢查過目錄文件,看看'_ // OASIS // DTD DITA Concept // EN'公共標識符映射到哪個DTD? –

回答

1

我從氧氣支持得到了答案。不確定這有助於任何人,這是一種不尋常的情況......但自定義DITA OT的xercesImpl.jar庫必須包含在轉換方案中。然後它工作。

1

如果您有一個XML處理管道,&#38;&amp;錯誤,那麼您的XML處理管道已損壞。代碼中的某些內容不符合&符號。您應該修復代碼,而不是試圖通過修改XML文檔來解決它。

+0

我不懷疑你是對的,但是正如我在評論@亨寧我正在使用DITA Open Toolkit 1.4.3,這不是我的選擇,它是客戶端。他們將最終升級,而這個問題將會消失,但在此之前我需要修復而不必修改整個DITA Open Toolkit。我還應該提到,轉換隻是爲了草稿,但對於獲得正確的輸出仍然很重要。 – Anders

+0

所以這就是爲什麼我試圖找到一個解決方法,即使在工具包的管道中出現問題......我只是不明白爲什麼我不能用dtd中的實體替換&,是它不可能「覆蓋」預定義的實體? – Anders

+0

我嚴重懷疑DITA Open Toolkit得到這個錯誤。在這個管道中你是否有任何自定義代碼?客戶可能寫了些什麼?這就是錯誤所在。 –