04 May 2010 Error, Exception, Xml Robert Muehsig

image

Ich hatte heute mit einem kleinen XML Problem zu kämpfen. Bei der Generierung des XMLs trat der oben genannte Fehler auf. Problemlösung in kurz: "&”, "<” & ">” maskieren wenn man InnerXml setzt oder "vollständiges” Xml Element setzen.

Problemfall:

    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            XmlElement element = doc.CreateElement("element");
            element.InnerXml = "hello & good bye";
        }
    }
Dieser Code endet mit einer Exception. Entweder man setzt InnerText oder maskiert das "&”. Das gleiche gilt auch für "<” bzw. ">” z.B. mit HttpUtility.HtmlEncode. Wenn man komplettes, valides XML reingibt funktioniert es auch:

        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            XmlElement element = doc.CreateElement("element");
            element.InnerXml = "hello <test></test> good bye";
        }

Eigentlich völlig logisch. Problematisch wird es nur wenn man z.B. HTML Markup wie "<br/>” und vom User eingegebene Texte (wo auch ein "&” oder "<” drin stehen könnte) auftauchen. Da die Fehlermeldung mir recht nichtsagend war, hab ich mir gedacht es zu bloggen. :)


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de