我从以下代码块中得到以下异常。
解析EntityName时发生错误。第1行,第844位。
我试图将从表中检索到的数据集解析为数据集。
public DataSet BindMasterData(string xml)
{
DataSet ds = null;
try
{
ds = new DataSet();
TextReader txtReader = new StringReader(xml);
XmlReader reader = new XmlTextReader(txtReader);
ds.ReadXml(reader);
}
catch (Exception ex)
{
return new DataSet();
}
return ds;
}
我已经找出了异常的原因,但我无法解决它。在这种特殊情况下,字符串(从DB检索)包含一个特殊字符(&)。这导致例外。我怎么解决它。对此的任何帮助都会很棒。
谢谢&问候 塞巴斯蒂安
答案 0 :(得分:60)
只需更换它们:
在XML元素中无效:
" "
' '
< <
> >
& &
public static string UnescapeXMLValue(string xmlString)
{
if (xmlString == null)
throw new ArgumentNullException("xmlString")
return xmlString.Replace("'", "'").Replace(""", "\"").Replace(">", ">").Replace("<", "<").Replace("&", "&");
}
public static string EscapeXMLValue(string xmlString)
{
if (xmlString == null)
throw new ArgumentNullException("xmlString")
return xmlString.Replace("'","'").Replace( "\"", """).Replace(">",">").Replace( "<","<").Replace( "&","&");
}
答案 1 :(得分:17)
这已经得到了解答,但是通过使用Escape方法在.NET 4.5中实现相同的结果找到了更好的方法,如下所示:
var xmlWithEscapedCharacters = SecurityElement.Escape(xmlWithoutEscapedCharacters);
然后只将该字符串插入正在生成的XML中。
答案 2 :(得分:1)
如果您的XML是使用字符串连接构造的,那么您将要逃避它。
&
&
<
>
和<
应分别成为>
和{{1}}。
也可能有其他人。 当然,您应该使用正确的XML编码器,而不是出于多种原因自己尝试使用它。
答案 3 :(得分:1)
由于数据来自某些数据库,因此可以在您描述的上下文中对问题进行热修复,但我强烈建议采用不同的方法。首先不应在xml中出现&符号,如here所述。请说明如何生成xml并解决问题。
答案 4 :(得分:1)
您可以使用:SecurityElement.Escape(XML string)
参考链接:https://msdn.microsoft.com/en-us/library/system.security.securityelement.escape(v=vs.110).aspx