解析EntityName时发生错误。 第1行,位置844

我从以下代码块中得到以下exception。

解析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; } 

我已经找到了exception的原因,但我无法解决它。 在这种特殊情况下,字符串(从DB检索)包含一个特殊字符(&)。 这导致例外。 我怎么解决它。 对此的任何帮助都会很棒。

谢谢你,塞巴斯蒂安

只需更换它们:

在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( "&","&"); } 

这已经得到了回答,但是通过使用Escape方法在.NET 4.5中实现相同的结果找到了一种更好的方法,如下所示:

 var xmlWithEscapedCharacters = SecurityElement.Escape(xmlWithoutEscapedCharacters); 

然后只需将该字符串插入正在生成的XML中。

链接: MSDN – SecurityElement.Escape方法

如果您的XML是使用字符串连接构造的,那么您将希望将其转义。 &应该成为&<>应该成为<> 分别。

也可能有其他人。 当然,您应该使用正确的XML编码器,而不是出于多种原因自己尝试使用它。

由于数据来自某些数据库,因此可以在您描述的上下文中对问题进行热修复,但我强烈建议采用不同的方法。 首先不应在xml中出现&符号,如此处所述。 请说明如何生成xml并解决问题。

您可以使用: SecurityElement.Escape(XML string)

参考链接: https : //msdn.microsoft.com/en-us/library/system.security.securityelement.escape(v=vs.110).aspx