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