Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reference to undeclared entity exception while working with XML

Tags:

c#

xml

dtd

I am trying to set the innerxml of a xmldoc but get the exception: Reference to undeclared entity

XmlDocument xmldoc = new XmlDocument();
string text = "Hello, I am text α   – —"
xmldoc.InnerXml = "<p>" + text + "</p>";

This throws the exception:

Reference to undeclared entity 'alpha'. Line 2, position 2..

How would I go about solving this problem?

like image 971
Rob Avatar asked Nov 11 '08 18:11

Rob


4 Answers

XML, unlike HTML does not define entities (ie named references to UNICODE characters) so &alpha; &mdash; etc. are not translated to their corresponding character. You must use the numerical value instead. You can only use &lt; and &amp; in XML

If you want to create HTML, use an HtmlDocument instead.

like image 100
Stephan Leclercq Avatar answered Oct 10 '22 22:10

Stephan Leclercq


In .Net, you can use the System.Xml.XmlConvert class:

string text = XmlConvert.EncodeName("Hello &alpha;"); 

Alternatively, you can declare the entities locally by putting the declarations between square brackets in a DOCTYPE declaration. Add the following header to your xml:

<!DOCTYPE documentElement[ <!ENTITY Alpha "&#913;"> <!ENTITY ndash "&#8211;"> <!ENTITY mdash "&#8212;"> ]> 

Do a google on "html character entities" for the entity definitions.

like image 45
LandedGently Avatar answered Oct 10 '22 21:10

LandedGently


Try replacing &Alpha with

  &#913;
like image 39
FlySwat Avatar answered Oct 10 '22 21:10

FlySwat


The preceding answer is right. Another alternative is to link your html document to the DTD where those character entities are defined, and that is standard XHTML DTD definition. Your xml file should include the following declaration:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
            "http://www.w3.org/TR/html4/strict.dtd">
like image 35
Fernando Miguélez Avatar answered Oct 10 '22 21:10

Fernando Miguélez