Pergunta

Se eu tiver um XElement que possui elementos filhos e remover um elemento filho do pai, removendo todas as referências entre os dois, o XElement filho terá os mesmos namespaces que o pai?

Em outras palavras, se eu tiver o seguinte XML:

<parent xmlns:foo="abc">
    <foo:child />
</parent>

e eu removo o elemento filho, o xml do elemento filho ficará assim

<child xmlns="abc" />

ou gosto

<child />
Foi útil?

Solução

A resposta é sim, os namespaces se propagam para os filhos.

Você NÃO precisa especificar o namespace nos elementos filhos.O escopo de um namespace inclui todos os elementos até a tag de fechamento do elemento em que foi definido.

Veja a seção #6.1 aqui http://www.w3.org/TR/REC-xml-names/#scoping

espero que ajude

Outras dicas

Se você incluir o elemento mencionado na nova árvore xml, ele estará no mesmo 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());

Resultado:

<a xmlns:foo="abc" />
<a xmlns:boo="efg">
   <b xmlns="abc"></b>
</a>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top