简体   繁体   中英

An error occurred while parsing EntityName. Line1, position 844

I have got the following exception from the below code block.

An error occurred while parsing EntityName. Line1, position 844.

I was trying to parse s set of data retrieved from table to a data set.

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

I have figured out the reason for the exception, but I couldn't solve it. In this particular situation, the string(which is retrieved from DB) contains a special character (&). That causes exception. How I can solve it. Any help on this would be great.

Just replace them:

Not valid in XML elements:

"   "
'   '
<   &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;");
  }

This has already been answered, but found a nicer way of achieving the same outcome by doing this in .NET 4.5 by using the Escape method as below:

var xmlWithEscapedCharacters = SecurityElement.Escape(xmlWithoutEscapedCharacters);

and then just plug that string into the XML that is being generated.

Link: MSDN - SecurityElement.Escape Method

If your XML is being constructed with string concatenation then you'll be wanting to escape it. & should become &amp; while < and > should become &lt; and &gt; respectively.

There may be others too. Of course you should really use a proper XML encoder rather than trying to do it yourself for many reasons.

As the data comes from some data base, the problem can be hot-fixed in the context you described, but I would strongly recommend a different approach. The ampersand symbol should not have occured in the xml in the first place, as discussed here . Please clarify how the xml is generated and address the problem there.

You can use: SecurityElement.Escape(XML string)

Reference link: https://msdn.microsoft.com/en-us/library/system.security.securityelement.escape(v=vs.110).aspx

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM