2010-11-12 37 views
2

我正在C#3.5工作。有沒有辦法阻止數字實體在XmlDocument中被展開?

我有一個XML文檔,其中包含一個元素的值內的字符實體。參考文獻是 (LF)。我不希望這個擴展到一個實際的換行,我希望它保持爲一個實體。這是因爲處理XML的商業工具需要將LF表示爲實體,而不是實際的LF。

但是,如果我將它傳遞給XmlReader附近的任何位置,它將被轉換。所以我切換到StreamReader,但它然後通過XmlDocument.Load & XmlDocument.LoadXml轉換。

我試着將XmlResolver設置爲null,禁止DTD和各種類型,但我無法讓文檔離開實體。

任何想法?我將通過一些雙重轉義來消除內容,但我想知道是否有正確的方法來做到這一點。

(它,因爲它正在通過一個Web服務作爲一個XmlNode發送到是XML-ISED在所有的原因....我不能改變API)

+1

「處理XML的商業工具」是如何傳遞的? – Dan 2010-11-12 16:53:42

+0

我們自己的工具正在使用我們的Web服務,並寫出一個文件,然後加載商業工具。這是我可以逃脫雙逃脫的閃光。我寧願沒有爲Web服務的其他消費者提供警告,但我只希望他們能夠將XmlNode映射到磁盤並完成它。儘管羅伯特對我的閃避作出了迴應,但我更喜歡關於XmlWriter的說明。當我回到辦公室時,我會看看代碼。 – 2010-11-14 17:20:37

回答

0

您應該使用XmlWriterXmlWriterSettings對象的NewLineHandling屬性設置爲NewLineHandling.Entitize,並將XML寫入字符串。這會得到一個包含實體而不是LF字符的字符串。

+0

我剛剛嘗試過使用XmlWriter來描述吐出我的XmlDocument到一個StringBuilder,但我仍然得到一個換行符,而不是一個實體。來自SOAP調用的XmlDocument具有物理換行符,而不是轉義實體,如果有幫助的話。 – 2010-11-15 11:02:42

+0

我的不好; 'Entitize'將'\ r'變成'&#D;',並且只保留'\ n'。事實上,無論如何,'XmlReader'都會把'&#A;'變成'\ r'。 'XmlReader'自動將'&#A;'轉換爲'\ r',所以你解析的任何字符串都會將該實體替換爲實際字符。但這就是XML解析器應該如何工作的原因。那麼爲什麼你使用的工具不支持XML? – 2010-11-15 19:17:28

+0

...因爲它是Microsoft Excel。 – 2010-11-15 20:18:41

相關問題