2010-03-08 33 views
3

我想驗證我的xml反對它的xsd並獲得給定編碼中的錯誤無效字符。我用驗證代碼如下:xml無效字符在給定的編碼

private static void ValidatingProcess(string XSDPath, string xml) 
    { 
     MemoryStream stream = 
      new MemoryStream(ASCIIEncoding.Default.GetBytes(xml)); 

     using (StreamReader SR = new StreamReader(XSDPath)) 
     { 
      XmlSchema Schema = XmlSchema.Read(SR, ReaderSettings_ValidationEventHandler); 
      XmlReaderSettings ReaderSettings = new XmlReaderSettings(); 
      ReaderSettings.ValidationType = ValidationType.Schema; 
      ReaderSettings.Schemas.Add(Schema); 

      ReaderSettings.ValidationEventHandler += ReaderSettings_ValidationEventHandler; 
      XmlReader objXmlReader = XmlReader.Create(stream, ReaderSettings); 

      bool notDone = true; 
      while (notDone) 
      { 
       notDone = objXmlReader.Read(); 
      } 
     } 
    } 

上的字符它的錯誤,如é於是猜到這是UTF-8被指定爲編碼或創建與在上面的代碼將MemoryStream方式的事實ASCIIEncoding。我試着將xsd和xml中的編碼更改爲UTF-16,將內存中的編碼更改爲UTF32,但似乎沒有效果。有任何想法嗎?

+0

什麼編碼的文件? – Oded 2010-03-08 11:28:28

+0

您將輸入字符串轉換爲ASCII碼,並且想知道非ASCII字符的編碼問題嗎? – dtb 2010-03-08 11:34:46

+0

哪一個文件?如果是xml,我將它作爲一個字符串傳遞給上面的方法,該字符串在xml頭文件中指定了UTF-16 endcoding並將其轉換爲內存流供使用。 – PeteT 2010-03-08 11:34:53

回答

5

如果輸入字符串包含非ASCII字符,請不要將輸入字符串轉換爲ASCII。

可以使用StringReader提供您輸入的字符串直接到XmlReader

using (var reader = XmlReader.Create(new StringReader(xml), settings)) { ...