¿Los espacios de nombres se propagan a los niños en los objetos XElement?
-
09-06-2019 - |
Pregunta
Si tengo un XElement que tiene elementos secundarios y si elimino un elemento secundario del elemento principal, eliminando todas las referencias entre los dos, ¿el XElement secundario tendrá los mismos espacios de nombres que el principal?
En otras palabras, si tengo el siguiente XML:
<parent xmlns:foo="abc">
<foo:child />
</parent>
y elimino el elemento secundario, ¿se verá así el xml del elemento secundario?
<child xmlns="abc" />
o como
<child />
Solución
La respuesta es sí, los espacios de nombres se propagan a los niños.
NO es necesario especificar el espacio de nombres dentro de los elementos secundarios.El alcance de un espacio de nombres incluye todos los elementos hasta la etiqueta de cierre del elemento en el que se definió.
Ver sección #6.1 aquí http://www.w3.org/TR/REC-xml-names/#scoping
Espero que ayude
Otros consejos
Si incluye el elemento mencionado en el nuevo árbol xml, estará en el mismo espacio de nombres.
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());
Resultado:
<a xmlns:foo="abc" />
<a xmlns:boo="efg">
<b xmlns="abc"></b>
</a>