2011-01-07 6 views
0

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

ответ

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

Если вы разместите код или XML, ** пожалуйста ** выделить эти строки в текстовом редакторе и нажмите на кнопку «код образцы» ({}) на панели инструментов редактора, чтобы красиво форматировать и синтаксиса выделите его! –

+0

сделаю, спасибо. – Bohn

+0

XML - это не обычный язык! – Amy

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; 
    } 
Смежные вопросы