web-dev-qa-db-fra.com

Comment puis-je supprimer l'attribut xmlns vide du nœud créé par XElement

Voici mon code:

XElement itemsElement = new XElement("Items", string.Empty);
//some code
parentElement.Add(itemsElement);

Après cela, j'ai obtenu ceci:

<Items xmlns=""></Items>

L'élément parent n'a pas d'espace de noms. Que puis-je faire pour obtenir un élément Items sans l'attribut namespace vide?

34
GrzesiekO

Tout dépend de la façon dont vous gérez vos espaces de noms. Le code ci-dessous crée des éléments enfants avec différents espaces de noms:

XNamespace defaultNs = "http://www.tempuri.org/default";
XNamespace otherNs = "http://www.tempuri.org/other";

var root = new XElement(defaultNs + "root");
root.Add(new XAttribute(XNamespace.Xmlns + "otherNs", otherNs));

var parent = new XElement(otherNs + "parent");
root.Add(parent);

var child1 = new XElement(otherNs + "child1");
parent.Add(child1);

var child2 = new XElement(defaultNs + "child2");
parent.Add(child2);

var child3 = new XElement("child3");
parent.Add(child3);

Il produira du XML qui ressemble à ceci:

<root xmlns:otherNs="http://www.tempuri.org/other" xmlns="http://www.tempuri.org/default">
    <otherNs:parent>
        <otherNs:child1 />
        <child2 />
        <child3 xmlns="" />
    </otherNs:parent>
</root>

Regardez la différence entre child1, child2 et child3. child2 est créé en utilisant l'espace de noms par défaut, qui est probablement ce que vous voulez, tandis que child3 c'est ce que vous avez maintenant.

77
Christoffer Lette