Donnerstag, 4. April 2013

"Dem Inhalt können keine Nichtleerzeichen hinzugefügt werden"

Beim Programmieren geht mit Sicherheit immer etwas irgendwas in die Hose. Wenn man mit XML arbeitet, passiert das auch schon gerne mal bevor man richtig mit dem Programmieren begonnen hat.

Der Konstruktor von XDocument ist dabei besonders tückisch. Er ist folgendermaßen deklariert:

public XDocument(
 params Object[] content
)

Das bedeutet, dass er alles akzeptiert, was man ihm gibt. Das meiste, was man ihm geben kann, ist leider falsch. Man erhält vor allem beim Aufruf von new XDocument("...") die kryptische Fehlermeldung (Exception): "Dem Inhalt können keine Nichtleerzeichen hinzugefügt werden".

Der Fehler kann folgende Ursachen haben:
  1. Der Konstruktor von XDocument wurde mit Datei-Pfad als Argument aufgerufen. Der Konstruktor von XDocument, noch der von XmlDocument ist dafür gedacht, Dateien zu verarbeiten. Man verwendet stattdessen die Methode XDocument.Load (statisch) oder eine passende Load-Methode von XMLDocument.
  2. Der Konstruktor von XDocument wurde mit XML-Code als Argument aufgerufen. Auch keine gute Idee. Wenn das XML bereits als String vorliegt, verwendet man entweder XDocument.Parse (statisch) oder XMLDocument.LoadXML.
Ich hoffe, ich verwirre mit dieser Antwort niemanden. Am besten schaut man sich noch folgendes Code-Beispiel an:
// Laden aus String mit XDocument
System.Xml.Linq.XDocument myXDoc = System.Xml.Linq.XDocument.Parse(p);
 Oder für .NET 2.0 und älter:
// Laden aus String mit XmlDocument
System.Xml.XmlDocument myXmlDoc = new System.Xml.XmlDocument();
myXmlDoc.LoadXml(p); // einfache Variante
   
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(new StringReader(p)); // komplizierte Variante (Schritt 1)
myXmlDoc.Load(reader); // komplizierte Variante (Schritt 2)
Wie man das nun mit MSXML.XMLDocument erreicht überlasse ich dem Leser zur Übung.

Keine Kommentare:

Kommentar veröffentlichen