2012-02-27 13 views
7

Olası Çoğalt:XML serializer karakter CDATA içinde olduğunda neden geçersiz karakter istisnası atar?

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 

Neden .Net Bu istisna atıyor: Bu bir ArgumentException
Why are “control” characters illegal in XML?
Saving an escape character 0x1b in an XML file

? Ben yasadışı karakterleri CDATA'da saklıyorum, bu yüzden yasadışı karakterlerin benim için ele alınacağını düşünürdüm. Bu, diğer karakterlerden oluşan bir grup için de geçerlidir (örneğin, 0x1B, 0x1C, 0x1E, 0x1E, 0x1F).

Bu soruna nasıl çalışıyorsunuz?

+4

Bu soruları görün: [XML dosyasında bir çıkış karakteri 0x1b kaydetme] (http://stackoverflow.com/questions/4134438/saving-an-escape-character-0x1b-in-an-xml-file) ve [Neden XML'de “kontrol” karakterleri yasa dışıdır?] (Http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml). Workaraund, bir XML'e kaydetmeden önce Base64 kodlamasını kullanmak olacaktır. – oleksii

+0

@oleksii Bunu bir yanıt olarak vermelisiniz, çünkü doğru yanıt. – Bevan

+0

@Bevan: Hayır, aslında soru, kopya olarak kapatılmalıdır. –

cevap

0

gibi bazı temizleme xml yöntemini de çağırabilirim. SecurityElement.Escape'in çalışacağını sanmıyorum çünkü \ x1A bir kontrol kodudur - yerine geçecek geçerli bir xml öğesi yoktur.

Daha fazla ayrıntı için bu list of valid XML characters adresine bakın.

-1

System.Security ad alanından SecurityElement öğesini kullanarak xml verilerinizi çıkış verileri olarak kaydetmeyi deneyin. Daha fazla bilgi here

string xmlData = SecurityElement.Escape(xmlData); 

Geçersiz XML karakterler false olarak ayarlanmış CheckCharacters özelliğiyle belirlenen XmlWriterSettings ile XDocument oluşturarak yazılabilir bulunabilir. Bu daha sonra bunları & # 0; - & # 0x1F. Daha fazla bilgi için this makalesine bakın. Ayrıca alternatif olarak this one.

+0

Bu işe yaramıyor. Ben hala SecurityElement.Escape kullandıktan sonra character \ x1A için bir ArgumentException alıyorum. –

+0

Bağlamında nasıl kullanıldığını gösterebilir misin? –

+1

XML'de ne olursa olsun kontrol karakterlerine izin verilmez. –