Entwickler-Ecke

IO, XML und Registry - ChildNodes vom RootNode bekommen leeren Namespace


Maliko - So 13.07.14 16:35
Titel: ChildNodes vom RootNode bekommen leeren Namespace
Hoi,

ich hab mal ne kurze Frage. Und zwar hab ich ein Programm, welches eine XML generiert. Dies funktioniert auch wunderbar, allerdings fügt das System automatisch jedem Node, welcher sich direkt unterhalb des Root-Nodes befindet ein xmlns="" als Attribut hinzu. Die Nodes, welche sich unterhalb der mit diesem Namespace gekennzeichneten Node befinden, bekommen ihn jedoch nicht.

Beispiel:

XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<RootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xxxxx">
  <ChildNode1 xmlns="">
    <SubChildNode>
      <Test>123abc</Test>
    </SubChildNode>
  </ChildNode1>
  <ChildNode2 GUID="c413657a-3f96-42fc-9491-a9bdb08dc890" xmlns="" />
  <ChildNode3 xmlns="">
    <SubChildNode2 XX="X" XXXX="XXX" />
  </ChildNode3>
</RootNode>


Hat vielleicht jemand eine Ahnung woran das liegen kann? Hier der Code, mit welchem das Generiert wird:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
                XDocument xml = new XDocument();
                XNamespace ns = "http://xxx.xxxx.de";
                xml.Declaration = new XDeclaration("1.0""utf-8""yes");
                xml.Add(new XElement(ns + "RootNode"new XAttribute(XNamespace.Xmlns + "xsi""http://www.w3.org/2001/XMLSchema-instance")));

                XElement roots = xml.Root;
                root.Add(
                    new XElement("ChildNode1",
                        new XElement("SubChildNode",
                            new XElement("Test""123abc"))),
                    new XElement("ChildNode2"new XAttribute("GUID", Guid.NewGuid())));


Danke schon mal im Vorraus.

Lg Maliko


Th69 - Mo 14.07.14 10:03

Hallo Maliko,

wenn ich die Antworten bei XElement is automatically adding xmlns=“” to itself [http://stackoverflow.com/questions/5955878/xelement-is-automatically-adding-xmlns-to-itself] richtig interpretiere, dann mußt du den Namespace bei allen untergeordneten Elementen angeben - weil wenn du keinen angibst (und sich dieser vom Root-Namespace unterscheidet), dann wird ein leeerer Namespace hinzugefügt.