Werden Namespaces an untergeordnete Elemente in XElement-Objekten weitergegeben?
-
09-06-2019 - |
Frage
Wenn ich ein XElement habe, das untergeordnete Elemente hat, und wenn ich ein untergeordnetes Element vom übergeordneten Element entferne und alle Referenzen zwischen den beiden entferne, hat das untergeordnete XElement dann dieselben Namespaces wie das übergeordnete Element?
Mit anderen Worten, wenn ich das folgende XML habe:
<parent xmlns:foo="abc">
<foo:child />
</parent>
und ich das untergeordnete Element entferne, wird die XML-Datei des untergeordneten Elements aussehen?
<child xmlns="abc" />
oder so
<child />
Lösung
Die Antwort lautet: Ja, Namespaces werden an untergeordnete Elemente weitergegeben.
Sie müssen den Namespace NICHT innerhalb untergeordneter Elemente angeben.Der Geltungsbereich eines Namespace umfasst alle Elemente bis zum schließenden Tag des Elements, in dem er definiert wurde.
Siehe Abschnitt Nr. 6.1 hier http://www.w3.org/TR/REC-xml-names/#scoping
Ich hoffe, das hilft
Andere Tipps
Wenn Sie das erwähnte Element in den neuen XML-Baum aufnehmen, befindet es sich im selben Namespace.
var xml1 = XElement.Parse("<a xmlns:foo=\"abc\"><foo:b></foo:b></a>");
var xml2 = XElement.Parse("<a xmlns:boo=\"efg\"></a>");
XNamespace ns = "abc";
var elem = xml1.Element(ns + "b");
elem.Remove();
xml2.Add(elem);
Console.WriteLine(xml1.ToString());
Console.WriteLine(xml2.ToString());
Ergebnis:
<a xmlns:foo="abc" />
<a xmlns:boo="efg">
<b xmlns="abc"></b>
</a>