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.
Solution 1:
Just replace them:
Not valid in XML elements:
" "
' '
< <
> >
& &
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( "<","<");
}
Solution 2:
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
Solution 3:
If your XML is being constructed with string concatenation then you'll be wanting to escape it.
&
should become &
while <
and >
should become <
and >
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.