我坚持从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字符。 –