开发者

Saving an XML that has invalid characters

开发者 https://www.devze.com 2023-02-03 16:16 出处:网络
there are code snippets that strip the invalid characters inside a string before we save it as an XML ... but I have one more problem: Let\'s say my user wants to have a column name like \"[MyColumnOn

there are code snippets that strip the invalid characters inside a string before we save it as an XML ... but I have one more problem: Let's say my user wants to have a column name like "[MyColumnOne] ...so now I do not want to strip these "[","] well because the开发者_StackOverflow社区se are the ones that user has defined and wants to see them so if I use some codes that are stripping the invalid characters they are also removing "[" and "[" but in this case I still need them to be saved... what can I do?


Never mind, I changed my RegEx format to use XML 1.1 instead of XML 1.0 and now it is working good :

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;


This worked for me, and it was fast.

    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;
    }
0

精彩评论

暂无评论...
验证码 换一张
取 消