2011-02-03 63 views
7
StringBuilder output = new StringBuilder(); 
using (XmlWriter writer = XmlWriter.Create(output)) 
{ 
    writer.WriteStartElement("test"); 
    writer.WriteCData("taco\vbell"); 
    writer.WriteEndElement(); 
    writer.WriteEndDocument(); 
} 

Console.WriteLine(output.ToString()); 

WriteCData引發以下的ArgumentException, 「 '\ V',十六進制值0x0B中,是無效字符」XmlWriter.WriteCData引發ArgumentException - 無效字符

我想CData的可以採取任何類型的數據。由於情況並非如此,我必須逃避哪些角色?謝謝。

+0

傢伙 ​​- 感謝您的信息。這很有幫助。 – James 2011-02-04 14:26:25

回答

9

不,XML本身不能表示除tab,回車和換行之外的任何早於U + 0020的字符。

the specsection 2.2

字符範圍

字符:: =#X9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]/*任何Unicode字符,不包括代理塊,FFFE和FFFF。 */

不幸的是,沒有標準的方式來表示「禁止」字符。你必須創建你自己的轉義機制。

1

,如果你有過被要求這樣有心計消費者無法控制的大概只有必需的,但在這樣的緊要關頭,您可以禁用的XmlWriter的字符檢查機制:

XmlWriterSettings s = new XmlWriterSettings(); 
s.CheckCharacters = false; 
using (XmlWriter writer = XmlWriter.Create(output, s)){...}