2012-02-27 9 views
7

संभव डुप्लिकेट:एक्सएमएल सीरियलाइज़र अमान्य चरित्र अपवाद क्यों फेंकता है जब चरित्र सीडीएटीए के अंदर होता है?

var c = '\x1A'; 

    var xml = new XDocument(
       new XDeclaration("1.0", "utf-8", null), 
       new XElement("test", new XCData(c.ToString())) 
      ); 

    var foo = xml.ToString(); // ArgumentException 

क्यों नेट इस अपवाद फेंक है:
Why are “control” characters illegal in XML?
Saving an escape character 0x1b in an XML file

यह एक ArgumentException फेंकता है? मैं सीडीएटीए में अवैध चरित्र लपेट रहा हूं, इसलिए मैंने सोचा होगा कि अवैध पात्र मेरे लिए संभाले जाएंगे। यह अन्य पात्रों के समूह के लिए भी मामला है (उदा। 0x1B, 0x1C, 0x1E, 0x1E, 0x1F)।

आप इस समस्या के आसपास कैसे काम करते हैं?

+4

इन प्रश्नों को देखें: [एक एक्सएमएल फ़ाइल में एक बचने वाला चरित्र 0x1b सहेजना] (http://stackoverflow.com/questions/4134438/saving-an-escape-character-0x1b-in-an-xml-file) और [एक्सएमएल में "नियंत्रण" अक्षर अवैध क्यों हैं?] (Http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml)। एक्सएमएल में सहेजने से पहले वर्कअराउंड बेस 64 एन्कोडिंग का उपयोग करना होगा। – oleksii

+0

@oleksii आपको इसे एक उत्तर में बदलना चाहिए, क्योंकि यह सही प्रतिक्रिया है। – Bevan

+0

@ बेवन: नहीं, असल में सवाल डुप्लिकेट के रूप में बंद होना चाहिए। –

उत्तर

0

मुझे नहीं लगता सुरक्षा सुरक्षा। ऐस्केप काम करेगा क्योंकि \ x1A एक नियंत्रण कोड है - विकल्प के लिए कोई वैध xml इकाई नहीं है।

थोड़ा और विस्तार के लिए यह list of valid XML characters देखें।

-1

सिस्टम से सुरक्षा एलीमेंट का उपयोग कर अपने एक्सएमएल डेटा को बचने के डेटा के रूप में संग्रहीत करने का प्रयास करें। सुरक्षा नामस्थान। अधिक जानकारी पाया जा सकता है here

string xmlData = SecurityElement.Escape(xmlData); 

अमान्य XML वर्ण CheckCharacters संपत्ति गलत पर सेट के साथ सेट XmlWriterSettings साथ XDocument बनाने के द्वारा लिखा जा सकता है। इसके बाद उन्हें संख्यात्मक चरित्र के साथ प्रतिस्थापित किया जाएगा जैसे & # 0; - & # 0x1F। अधिक जानकारी के लिए this आलेख देखें। वैकल्पिक रूप से आप कुछ क्लीनअप एक्सएमएल विधि जैसे कि this one.

+0

यह काम नहीं करता है। मुझे सुरक्षाElement.Escape का उपयोग करने के बाद भी चरित्र \ x1A के लिए एक ArgumentException मिलता है। –

+0

क्या आप कृपया दिखा सकते हैं कि आपने इसे अपने संदर्भ में कैसे उपयोग किया है –

+1

एक्सएमएल में नियंत्रण वर्णों की अनुमति नहीं है, इससे कोई फर्क नहीं पड़ता। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^