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:
" "
' '
< <
> >
& &
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( "<","<");
}
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 &
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With