Faire des espaces de noms propager aux enfants dans XElement objets?
-
09-06-2019 - |
Question
Si j'ai un XElement qui a des éléments d'enfant, et si je supprime un élément enfant de la mère, en supprimant toutes les références entre les deux, l'enfant XElement ont les mêmes espaces de noms en tant que parent?
En d'autres mots, si j'ai le code XML suivant:
<parent xmlns:foo="abc">
<foo:child />
</parent>
et je supprime l'élément enfant, l'enfant de l'élément xml ressemble
<child xmlns="abc" />
ou comme
<child />
La solution
La réponse est oui, les espaces de noms ne se propagent aux enfants.
Vous n'avez PAS à spécifier l'espace de noms dans les éléments enfants.La portée d'un espace de noms comprend tous les éléments jusqu'à ce que la balise de fermeture de l'élément il a été défini.
Voir la section #6.1 ici http://www.w3.org/TR/REC-xml-names/#scoping
espère que ça aide
Autres conseils
Si vous incluez élément mentionné dans la nouvelle arborescence xml, il sera dans le même espace de noms.
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());
Résultat:
<a xmlns:foo="abc" />
<a xmlns:boo="efg">
<b xmlns="abc"></b>
</a>