Supprimez efficacement les déclarations d'espace de noms XML en C#
Cet article fournit une solution complète pour supprimer les déclarations d'espace de noms des documents XML afin de simplifier la structure ou de répondre à des besoins spécifiques.
Question :
Vous souhaitez supprimer toutes les déclarations d'espace de noms du document XML pour simplifier sa structure ou répondre à des exigences spécifiques.
Interface :
<code class="language-csharp">public interface IXMLUtils { string RemoveAllNamespaces(string xmlDocument); }</code>
Exemple XML :
<code class="language-xml"><?xml version="1.0" encoding="utf-16"?><arrayofinserts xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><insert><offer xmlns="http://schema.peters.com/doc_353/1/Types">0174587</offer><type2 xmlns="http://schema.peters.com/doc_353/1/Types">014717</type2><supplier xmlns="http://schema.peters.com/doc_353/1/Types">019172</supplier><id_frame xmlns="http://schema.peters.com/doc_353/1/Types"></id_frame><type3 xmlns="http://schema.peters.com/doc_353/1/Types"><type2></type2><main>false</main></type3><status xmlns="http://schema.peters.com/doc_353/1/Types">Some state</status></insert></arrayofinserts></code>
Résultat attendu :
<code class="language-xml"><?xml version="1.0" encoding="utf-16"?><arrayofinserts><insert><offer>0174587</offer><type2>014717</type2><supplier>019172</supplier><id_frame></id_frame><type3><type2></type2><main>false</main></type3><status>Some state</status></insert></arrayofinserts></code>
Solution :
Vous pouvez utiliser des fonctions récursives pour parcourir un document XML et supprimer les espaces de noms de tous les éléments. La fonction suit ces étapes :
Voici l'implémentation C# de la solution :
<code class="language-csharp">public static string RemoveAllNamespaces(string xmlDocument) { XElement xmlDocumentWithoutNamespaces = RemoveAllNamespaces(XElement.Parse(xmlDocument)); return xmlDocumentWithoutNamespaces.ToString(); } private static XElement RemoveAllNamespaces(XElement xmlDocument) { if (!xmlDocument.HasElements) { XElement xElement = new XElement(xmlDocument.Name.LocalName); xElement.Value = xmlDocument.Value; foreach (XAttribute attribute in xmlDocument.Attributes()) xElement.Add(attribute); return xElement; } return new XElement(xmlDocument.Name.LocalName, xmlDocument.Elements().Select(el => RemoveAllNamespaces(el))); }</code>
Cette solution est complète et robuste et peut gérer efficacement les éléments foliaires et non foliaires. Il préserve également les valeurs et attributs d'origine des éléments XML, garantissant une suppression fiable et précise des espaces de noms.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!