2012-11-16 25 views
1

我正在使用InDesign使用的IDML文件。我在插入特殊指令時遇到問題。我需要用IDML文件嵌入RightIndentTab。同樣的unicode是U + 0008。當我試圖補充說它會拋出錯誤,因爲這個unicode在XML規範中不被支持。IDML RightIndentTab導致換行

我對它進行了更多的研究,並且IDML有一個特殊的處理指令,它可以被插入,看起來像現在問題是當我添加它時,它會在RightIndent符號之前引入換行符。在調試我發現,內容元素看起來像

   <Content> 
       <?ACE 8?>9731396</Content> 

這是一個的XElement,我看到\ r \ n當我打電話的ToString()就可以了。我也嘗試使用XmlWriter。

我想是的XElement對象,它看起來像

   <Content><?ACE 8?>9731396</Content> 

在先進的感謝!

回答

1

我遇到了使用.NET將處理指令添加到IDML的完全相同的問題。即使關閉了大量空白,我也得到了InDesign將其視爲文本一部分的換行符。

我發現的唯一解決方案是將該文件保存爲XML,然後將其作爲文本文檔打開,並使用正則表達式替換>\r\n<?僅爲><?。這很醜陋,但它確實有效 - 我沒有正則表達式,但你應該能夠很快找出它。

但是,我從來沒有任何問題添加Unicode到Unicode XML字符。我只會使用&#x0008;並將XmlWriter編碼設置爲使用unicode。這裏舉一個例子:http://bytes.com/topic/net/answers/176665-how-write-unicode-using-xmlwriter其中推薦:

XmlTextWriter myWriter = new XmlTextWriter(fileStream, 
new System.Text.UnicodeEncoding(false, false)); 
+0

感謝您的回覆。這當然是在文件系統上轉儲XML之後再次處理文件的一個解決方案。在我們把它放到文件系統之前,我們能做到這一點嗎? –

+0

不是一旦你已經掌握了處理指令。 InDesign的缺點是 - 它不應該將開頭的''標籤和處理指令之間的空格表示爲重要的,但顯然他們的解析器將''節點內的所有內容視爲字符串而不是XML。您最好的選擇是在Unicode模式下使用XmlTextWriter,它應該允許您插入十六進制Unicode字符,例如'&#x0008;'您需要確保文檔保存爲UTF-16(不是UTF-8) - 那麼我認爲你的特殊角色應該工作。 – JcFx

+0

據我所知,它不起作用,因爲它是一個BACKSPACE字符,它在XML規範中是不受支持的字符。這可能是IDML引入這個特殊的XML處理指令來代替它們的原因。 –