我堅持從XML文件中刪除無效字符。我發現,應該剝奪一切什麼是不可用正則表達式:從XML字符串c刪除非法字符#
public static string CleanInvalidXmlChars(string text)
{
// From xml spec valid chars:
// #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
// any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
string re = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]";
return Regex.Replace(text, re, "");
}
這裏是我的代碼,它從SQL Server讀取數據(當然,一個片段)
using (var cmd = new SqlCommand(Context.Command, connection))
{
cmd.CommandTimeout = Context.CommandTimeout;
using (var reader = cmd.ExecuteReader())
{
StringBuilder xmlResults = new StringBuilder(string.Empty);
while (reader.Read())
{
xmlResults.Append(reader.GetString(0));
}
if (!string.IsNullOrWhiteSpace(xmlResults.ToString()))
{
var doc = new XmlDocument();
XmlReader xmlReader = XmlReader.Create(new StringReader(xmlResults.ToString()));
doc.Load(xmlReader);
var nav = doc.CreateNavigator();
var objs = nav.Select("/index/type");
foreach (XPathNavigator obj in objs)
{
o.OnNext(obj);
}
}
}
}
我已經試過包裝CleanInvalindXmlChars
在不同的地方:
while (reader.Read())
{
xmlResults.Append(CleanInvalindXmlChars(reader.GetString(0)));
}
或者在
XmlReader xmlReader = XmlReader.Create(new StringReader(CleanInvalindXmlChars(xmlResults.ToString())));
我正在閱讀的一個單元格中有一個x0B符號(我可以在SQL Server中替換它,但我希望在此安全)。
但是,我總是結束了錯誤
System.Xml.XmlException: '',十六進制值0x0B中,是一個無效字符 。 115行,位置33407.
任何人都可以幫助我解決這個問題嗎?
你在'x10FFFF'之前缺少一個反斜槓。但是,我懷疑這會解決問題。 –
您是否嘗試使用'input = Regex.Replace(input,@「[\ x0B]」,string.Empty)刪除這個'VT'符號;'?此外,我相信你需要這個無效的XML字符正則表達式 - '[\ u0000- \ u0008 \ u000B- \ u000C \ u000E- \ u0019] +' - 匹配並從字符串中刪除所有無效的XML字符。 –