Сохранение XML с недопустимыми символами - PullRequest
0 голосов
/ 08 января 2011

существуют фрагменты кода, которые удаляют недопустимые символы внутри строки, прежде чем мы сохраняем ее в виде XML ... но у меня есть еще одна проблема: допустим, мой пользователь хочет иметь имя столбца, например "[MyColumnOne] ...так что теперь я не хочу хорошо удалять эти "[", "], потому что это те, которые пользователь определил и хочет их увидеть, поэтому, если я использую некоторые коды, которые удаляют недопустимые символы, они также удаляют" ["и«[» но в этом случае мне все еще нужно их сохранить ... что я могу сделать?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Это сработало для меня, и было быстро.

    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 голосов
/ 08 января 2011

Неважно, я изменил свой формат 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...