2016-03-08 80 views
0

我想Xml序列化來自不同來源的大量字符串。XmlSerializer的清理字符串

問題是如果字符串包含序列化程序無法處理的字符,則XmlSerializer會引發異常。

當然,我已經完成了基本的字符串規範化,但一次又一次地找到「壞」字符。最新的3個是:'\a', '\0', '\u001f'

有沒有辦法從字符串中刪除所有不支持的字符或讓XmlSerializer忽略它們?

我當前的代碼是:

public static string CleanupStringForValidXMLExport(this string inputString) 
{ 
    if (!inputString.IsNullOrEmpty()) 
    { 
     //InvalidXMLCharacters 
     return inputString.Remove(new[] { '\x1A', '\x1D', '\x0B', '\x01', '\x02', '\x03', '\x04', '\x17', '\x18', '\a', '\0', '\u001f' }) 
      .RemoveMultipleWhiteSpaces() 
      .ReplaceUmlauts() 
      .ReplaceSpecialChars(); 
    } 

    return inputString; 
} 

回答

0

嘗試一下本作刪除無效的XML字符

public static string CleanupStringForValidXMLExport(this string inputString) 
    { 
     StringBuilder s = new StringBuilder(); 
     foreach(char ch in inputString) 
     { 
      if (XmlConvert.IsXmlChar(ch)) 
       s.Append(ch); 

     } 

     return s; 
    } 
1

Many characters被認爲是無效的XML,即使它們出現爲實體引用(如#x0)。不過,你可以放心地閱讀他們,如果你關閉字符檢查在XmlReader

new XmlReaderSettings { CheckCharacters = false }; 

請注意,這將關閉字符檢查的實體而已,而不是無效普通的字符,但你可以將它們轉換爲實體在你的預處理方法中,所以你可以保存一切。