2011-01-07 11 views
0

XMLとして保存する前に無効な文字を文字列内に取り除くコードスニペットがありますが、もう1つ問題があります。私のユーザーが"[MyColumnOne] ...だから、私はこれらの文字列をユーザーが定義して見たいと思っているので、これらの文字列を取り除きたくないのです。無効な文字を取り除いているコードを使用すると、 "["と "["しかし、この場合、私はまだそれらを保存する必要があります...私は何ができますか?無効な文字を含むXMLを保存する

答えて

0

気にしないで、私の代わりにXML 1.0のXML 1.1を使用するように私の正規表現の形式を変更し、今では良い取り組んでいる:

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; 
    } 
関連する問題