【问题标题】:Cleanup string for XmlSerializerXmlSerializer 的清理字符串
【发布时间】:2016-03-08 09:05:34
【问题描述】:

我正在尝试对来自不同来源的大量字符串进行 Xml 序列化。

问题是如果字符串包含序列化程序无法处理的字符,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;
}

【问题讨论】:

    标签: c# .net xml serialization xml-serialization


    【解决方案1】:

    Many characters 在 XML 中被视为无效,即使它们作为实体引用出现(例如 #x0)。但是,如果您在XmlReader 中关闭字符检查,则可以安全地阅读它们:

    new XmlReaderSettings { CheckCharacters = false };
    

    请注意,这只会关闭实体的字符检查,而不是无效的纯字符,但您可以在预处理方法中将它们转换为实体,以便保留所有内容。

    【讨论】:

      【解决方案2】:

      试试这个删除无效的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;
          }
      

      【讨论】:

        猜你喜欢
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-29
        • 2022-01-06
        • 2010-11-17
        • 2014-02-21
        • 2013-04-14
        相关资源
        最近更新 更多