2011-01-07 85 views
0

有一些代碼片段可以在將字符串保存爲XML之前去除字符串中的無效字符......但我還有一個問題:讓我們說我的用戶想要一個列名「[MyColumnOne] ...所以現在我不想去掉這些」[「,」],因爲這些是用戶定義的並且想要看到它們,所以如果我使用某些代碼來剝離無效字符,也正在刪除「[」和「[」,但在這種情況下,我仍然需要他們得救......我該怎麼辦?保存具有無效字符的XML

回答

0

沒關係,我改變了我的正則表達式格式使用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,** **請在高亮文本編輯器的線和編輯器工具欄上的「代碼示例」按鈕({})點擊很好的格式和語法高亮顯示! – 2011-01-07 21:49:05

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