保存包含无效字符的XML

时间:2011-01-07 21:45:16

标签: c# xml string

在将字符串保存为XML之前,有一些代码片段会删除字符串中的无效字符...但我还有一个问题:假设我的用户想要一个像“[MyColumnOne]”这样的列名...所以现在我不想剥离这些“[”,“]因为这些是用户定义的并且想要看到它们所以如果我使用一些剥离无效字符的代码它们也会删除”[“和“[”但在这种情况下,我仍然需要保存它们......我能做什么?

2 个答案:

答案 0 :(得分:0)

没关系,我将我的RegEx格式改为使用XML 1.1而不是XML 1.0,现在它运行良好:

string pattern = String.Empty;
//pattern =  @"#x((10?|[2-F])FFF[EF]|FDD[0-9A-F]|7F|8[0-46-9A-F]9[0-9A-F])"; //XML 1.0
pattern =  @"#x((10?|[2-F])FFF[EF]|FDD[0-9A-F]|[19][0-9A-F]|7F|8[0-46-9A-F]|0?[1-8BCEF])"; // XML 1.1
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);

if (regex.IsMatch(sString))
{
   sString = regex.Replace(sString, String.Empty);
   File.WriteAllText(sString, sString, Encoding.UTF8);
}

return sString;

答案 1 :(得分:0)

这对我有用,而且很快。

    private object NormalizeString(object p) {
        object result = p;

        if (p is string || p is long) {
            string s = string.Format("{0}", p);

            string resultString = s.Trim();
            if (string.IsNullOrWhiteSpace(resultString)) return "";

            Regex rxInvalidChars = new Regex("[\r\n\t]+", RegexOptions.IgnoreCase);

            if (rxInvalidChars.IsMatch(resultString)) {
                resultString = rxInvalidChars.Replace(resultString, " ");
            }

            //string pattern = String.Empty;
            //pattern = @"";
            ////pattern =  @"#x((10?|[2-F])FFF[EF]|FDD[0-9A-F]|7F|8[0-46-9A-F]9[0-9A-F])"; //XML 1.0
            ////pattern = @"#x((10?|[2-F])FFF[EF]|FDD[0-9A-F]|[19][0-9A-F]|7F|8[0-46-9A-F]|0?[1-8BCEF])"; // XML 1.1
            //Regex rxInvalidXMLChars = new Regex(pattern, RegexOptions.IgnoreCase);
            //if (rxInvalidXMLChars.IsMatch(resultString)) {
            //    resultString = rxInvalidXMLChars.Replace(resultString, "");
            //}

            result = string.Join("", resultString.Where(c => c >= ' '));
        }
        return result;
    }