Si un nœud appartient à un espace de noms, ses enfants appartiennent par défaut au même espace de noms. Il n'est donc pas nécessaire de fournir un attribut xmlns
pour chaque enfant, ce qui est bien.LINQ to XML: suppression de l'attribut d'espace de noms redondant dans les nœuds enfants
Cependant.
Si je crée deux nœuds comme celui-ci:
Dim parent = <parent xmlns="http://my.namespace.org"/>
Dim child = <child xmlns="http://my.namespace.org">value</child>
parent.Add(child)
Console.WriteLine(parent.ToString)
Le résultat est le suivant:
<parent xmlns="http://my.namespace.org">
<child xmlns="http://my.namespace.org">value</child>
</parent>
Mais, si les créer d'une manière moins pratique:
Dim parent = <parent xmlns="http://my.namespace.org"/>
Dim child As New XElement(XName.Get("child", "http://my.namespace.org")) With {.Value = "value"}
parent.Add(child)
Console.WriteLine(parent.ToString)
Le le résultat est plus souhaitable:
<parent xmlns="http://my.namespace.org">
<child>value</child>
</parent>
De toute évidence, je préfère utiliser la première méthode parce qu'elle est beaucoup plus intuitive et facile à coder. Il y a aussi une autre raison de ne pas utiliser la méthode 2 - parfois, je dois créer des noeuds avec XElement.Parse
, l'analyse d'une chaîne qui contient un attribut xmlns
, qui produit exactement les mêmes résultats que la méthode 1.
La question est - comment faire Je reçois la jolie sortie de la méthode 2, créant des noeuds comme dans la méthode 1? La seule option que je vois est de créer une méthode qui clonerait XElement donné, en le recréant efficacement selon le modèle de la méthode 2, mais cela semble moche. Je cherche une solution plus évidente que j'ai oubliée pour une raison quelconque.
@GSerg: Est-ce que la réponse ci-dessous répond à votre question? –