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

时间:2014-05-08 12:33:44

标签: c# xml

我从以下代码块中得到以下异常。

解析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检索)包含一个特殊字符(&)。这导致例外。我怎么解决它。对此的任何帮助都会很棒。

谢谢&问候 塞巴斯蒂安

5 个答案:

答案 0 :(得分:60)

只需更换它们:

在XML元素中无效:

"   "
'   '
<   &lt;
>   &gt;
&   &amp;

  public static string UnescapeXMLValue(string xmlString)
  {
    if (xmlString == null)
        throw new ArgumentNullException("xmlString")

    return xmlString.Replace("&apos;", "'").Replace("&quot;", "\"").Replace("&gt;", ">").Replace("&lt;", "<").Replace("&amp;", "&");
  }

 public static string EscapeXMLValue(string xmlString)
  {

    if (xmlString == null)
        throw new ArgumentNullException("xmlString")

    return xmlString.Replace("'","&apos;").Replace( "\"", "&quot;").Replace(">","&gt;").Replace( "<","&lt;").Replace( "&","&amp;");
  }

答案 1 :(得分:17)

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

var xmlWithEscapedCharacters = SecurityElement.Escape(xmlWithoutEscapedCharacters);

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

链接:MSDN - SecurityElement.Escape Method

答案 2 :(得分:1)

如果您的XML是使用字符串连接构造的,那么您将要逃避它。 & &amp; < >&lt;应分别成为&gt;和{{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