C# Problem mit XML-Attributen/Namespace

Darlis

Commodore
Registriert
Jan. 2011
Beiträge
4.458
Hallo,

ich möchte folgende XML-Datei erstellen:
Code:
<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SubElem>
        <SubSubElem />
    </SubElem>
</Document>
Dafür benutze ich diesen Code:
Code:
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml("<Document xmlns=\"urn:iso\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" />");

                XmlElement docElem = (XmlElement)xmlDoc.FirstChild;

                XmlElement subElem = xmlDoc.CreateElement("SubElem");
                docElem.AppendChild(subElem);
                XmlElement subSubElem = xmlDoc.CreateElement("SubSubElem");
                subElem.AppendChild(subSubElem);

                using (XmlWriter writer = XmlWriter.Create(file))
                {
                    xmlDoc.WriteTo(writer);
                }

Das funktioniert auch, allerdings klatsch mit dieser Code noch ein xmlns="" an das SubElem dran:
Code:
<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SubElem xmlns="">
        <SubSubElem />
    </SubElem>
</Document>
Gebe ich bei der Erstellung des SubElem noch die namespaceUri "urn:iso" an, verschwindet das xmlns="" zwar, wird dafür aber an SubSubElem drangehangen. Ich vermute, dass ich das irgendwo als Standard-Namespace deklarieren muss, aber wo? Oder muss ich wirklich bei jedem neu erstellen Element den Namespace angeben?
 
Wenn Du den Unterelementen keinen Namespace zuweist, wird der Default-Namespace
Code:
xmlns=""
verwendet.

Sollen die SubElemente ebenfalls in dem angegebenen Namespace enthalten sein, kannst Du für Deine SubElemente folgendes Schreiben:
Code:
XmlElement subElem = xmlDoc.CreateElement("SubElem", "urn:iso");
XmlElement subSubElem = xmlDoc.CreateElement("SubSubElem", "urn:iso");
Der Namespace wird dann bei den Unterelementen nicht mehr explizit rausgeschrieben.

Siehe dazu auch:
http://stackoverflow.com/questions/135000/how-to-prevent-blank-xmlns-attributes-in-output-from-nets-xmldocument
Ergänzung ()

Alternativ könntest Du noch einen qualifizierten Namespace benutzen:
Code:
xmlDoc.LoadXml("<Document xmlns:beliebigesPrefix=\"urn:iso\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" />");

Das würde allerdings dann auch in Deinem XML Dokument erscheinen.

Vor meiner ersten Antwort hatte ich Den letzten Abschnitt in Deinem Eröffnungspost nicht gelesen, sorry ;)
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben