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 />
¿Fue útil?

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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top