J'ai un fichier XML comme: avec c # I Créez un nouvel élément comme: p> comme vous pouvez le voir N'ajoutez pas le préfixe "myPrefix". Quelqu'un peut-il me dire comment je peux faire ça? Je ne veux plus abandonner les xmlns. Merci, Peter P> P>
3 Réponses :
Edit 2: strong> Edit 3: strong> edit 4: strong>
Si vous ajoutez l'attribut d'espace de noms ASWELL à l'élément, cela le forcera à ajouter le préfixe. Mais vous vous retrouvez toujours avec l'attribut XMLNS dans le nœud. Pour le supprimer, vous devrez probablement utiliser Xmlwriter. Strike>
Pour obtenir le XML exact que vous souhaitez que vous devez créer l'élément racine ASWELL: Strike> P>
D'ACCORD. J'ai trouvé un moyen d'obtenir ce que vous voulez sans xmlwriter: p>
Apparemment, il y avait un moyen plus facile ... beaucoup plus facile ... Voir les autres réponses. P> P>
Merci pour votre réponse, mais cela ne fonctionnera pas. Le résultat est comme:
@Peter: il apparaîtra de cette façon si l'élément est la racine. Ce n'est pas la racine, alors il sera préfixé si l'espace de noms est déclaré dans un ancêtre.
@Peter: C'est juste comment fonctionne le sérialisateur LINQ vers XML. Je ne sais pas si c'est même possible sans retourner et utiliser un xmlwriter code>.
@Jeff, hm ok merci. Peut-être que quelqu'un sait un moyen et j'essaierai Xmlwriter.
@Sani merci beaucoup! Cela fonctionne pour moi :) Maintenant, il suffit de supprimer les XMLNS.
@Peter: a fait une solution de contournement pour vous qui devrait fonctionner si le XML existant est ce qui est présenté ci-dessus. Sinon, vous pouvez modifier le code à votre goût.
@Sani: Merci pour votre exemple! J'ajoute xmltree au conteneur racine, donc je n'ai pas à créer la racine. J'ai seulement besoin de quelque chose pour supprimer les XMLNS.
Quelqu'un une suggestion comment je peux supprimer uniquement les deuxièmes XMLNS: myPrefix = ".."?
@Peter: seul moyen de le faire, que j'ai trouvé sans recourir à Xmlwriter, est de créer l'élément racine aswell que dans l'exemple ci-dessus.
@Sani: hm et comment puis-je le faire avec xmlwriter? Créer une racine n'est pas une option, car le XMLtree sera ajouté à un Xcontainer (avec déjà une racine).
@Peter: J'ai un exemple de travail pour vous maintenant ... sans Xmlwrtre ... :)
@Peter: Pendant que ma version fonctionne pour votre exemple, vous devez vraiment regarder les autres exemples qui sont plus corrects.
XElement container = XElement.Parse(xml); XNamespace myPrefix = container.GetNamespaceOfPrefix("myPrefix"); XElement xmlTree = new XElement(myPrefix + "Item", new XAttribute("Name", item.Name), new XAttribute("Mode", item.Mode)); container.Add(xmlTree);
Vous devez construire de nouveaux éléments dans l'espace de noms. En supposant que vous connaissez le préfixe de l'espace de noms souhaité dans l'échantillon XML, alors procédez comme suit:
var xml = "<myPrefix:Catalog xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:sys=\"clr-namespace:System;assembly=mscorlib\" xmlns:myPrefix=\"clr-namespace:........\"><myPrefix:Item Name=\"Item1\" Mode=\"All\" /></myPrefix:Catalog>"; XElement catalog = XElement.Parse(xml); XNamespace myP = catalog.GetNamespaceOfPrefix("myPrefix"); catalog.Add(new XElement(myP + "Item", new XAttribute("Name", "foo"), new XAttribute("Mode", "bar")));
Merci beaucoup pour cette belle solution.