作为删除无效XML字符的方法,我建议您使用XmlConvert.IsXmlChar方法.从那以后就加了.NET框架4,并在Silverlight中展示.以下是小样本:
void Main() {
string content = "\v\f\0";
Console.WriteLine(IsValidXmlString(content)); // False
content = RemoveInvalidXmlChars(content);
Console.WriteLine(IsValidXmlString(content)); // True
}
static string RemoveInvalidXmlChars(string text) {
var validXmlChars = text.Where(ch => XmlConvert.IsXmlChar(ch)).ToArray();
return new string(validXmlChars);
}
static bool IsValidXmlString(string text) {
try {
XmlConvert.VerifyXmlChars(text);
return true;
} catch {
return false;
}
}
作为转义无效XML字符的方法,我建议您使用XmlConvert.EncodeName方法.以下是小样本:
void Main() {
const string content = "\v\f\0";
Console.WriteLine(IsValidXmlString(content)); // False
string encoded = XmlConvert.EncodeName(content);
Console.WriteLine(IsValidXmlString(encoded)); // True
string decoded = XmlConvert.DecodeName(encoded);
Console.WriteLine(content == decoded); // True
}
static bool IsValidXmlString(string text) {
try {
XmlConvert.VerifyXmlChars(text);
return true;
} catch {
return false;
}
}
Update:个 应该提到的是,编码操作产生长度大于或等于源串的长度的串.当您将编码字符串存储在数据库中具有长度限制的字符串列中,并在应用程序中验证源字符串长度以符合数据列限制时,这一点可能很重要.