Comment faire pour supprimer attribut xmlns avec .NET API XML
XmlElement.Les attributs.Supprimer* méthodes fonctionnent très bien pour arbitraire attributs résultant dans l'supprimé les attributs de l'être retiré de XmlDocument.OuterXml de la propriété. Attribut Xmlns est cependant différente. Voici un exemple:
XmlDocument doc = new XmlDocument();
doc.InnerXml = @"<Element1 attr1=""value1"" xmlns=""http://mynamespace.com/"" attr2=""value2""/>";
doc.DocumentElement.Attributes.RemoveNamedItem("attr2");
Console.WriteLine("xmlns attr before removal={0}", doc.DocumentElement.Attributes["xmlns"]);
doc.DocumentElement.Attributes.RemoveNamedItem("xmlns");
Console.WriteLine("xmlns attr after removal={0}", doc.DocumentElement.Attributes["xmlns"]);
Le résultat est
xmlns attr before removal=System.Xml.XmlAttribute
xmlns attr after removal=
<Element1 attr1="value1" xmlns="http://mynamespace.com/" />
L'attribut semble être retirés de la collection d'Attributs, mais il n'est pas supprimé de XmlDocument.OuterXml.
Je suppose que c'est à cause de la signification particulière de cet attribut.
La question est comment faire pour supprimer l'attribut xmlns à l'aide .NET API XML.
Évidemment, je peux juste supprimer l'attribut à partir d'une représentation de Chaîne de caractères, mais je me demande si il est possible de faire la même chose en utilisant l'API.
@Edit: je suis en train de parler .NET 2.0.
- Je viens de tomber sur cette question. Bonne trouvaille!
Vous devez vous connecter pour publier un commentaire.
.NET API DOM ne prend pas en charge la modification de l'élément de l'espace de noms, ce qui est essentiellement d'essayer de faire. Ainsi, afin de résoudre votre problème, vous avez à construire un nouveau document d'une manière ou d'une autre. Vous pouvez utiliser le même .NET API DOM et créer un nouvel élément, sans préciser son espace de noms. Alternativement, vous pouvez créer une feuille de style XSLT qui transforme votre original "namespaces" document à un nouveau dans lequel les éléments seront pas d'espace de noms qualifiés.
J'ai vu les différentes options de ce fil et de venir à résoudre mon propre solution pour éliminer les xmlns attributs en xml. Cela fonctionne correctement et n'a pas de problèmes:
Il n'est pas nécessaire de faire autre chose pour supprimer xmlns à partir de xml.
Un grand merci à Ali Shah, ce thread a résolu mon problème à la perfection!
voici un C# conversion:
N'était-ce pas censé supprimer les espaces de noms?
Mais de toute façon sur une tangente ici, le XElement, XDocument et XNameSpace des classes de Système.Xml.Linq espace de noms (.Net 3.0) sont un meilleur sort que l'ancien XmlDocument modèle. Lui donner un aller. Je suis accro.
Oui, parce que c'est un nom d'ÉLÉMENT, vous ne pouvez pas supprimer explicitement. À l'aide de XmlTextWriter de WriteStartElement et WirteStartAttribute, et le remplacement de l'attribut avec des espaces vides seront susceptibles d'obtenir le travail fait.
Je suis le vérifier maintenant. sera mise à jour.
Peut-être à travers les XmlNamespaceManager ? http://msdn.microsoft.com/en-us/library/system.xml.xmlnamespacemanager.removenamespace.aspx mais c'est juste une supposition.
Nous pouvons convertir le fichier xml de la chaîne, retirez la xmlns de cette chaîne, et ensuite créer un XmlDocument à l'aide de cette chaîne, qui n'aura pas l'espace de noms.
voici ma solution sur vb.net les gars!