Heim >Backend-Entwicklung >C++ >Wie kann ich XML-Namespace-Deklarationen in C# effizient entfernen?

Wie kann ich XML-Namespace-Deklarationen in C# effizient entfernen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-23 22:44:13582Durchsuche

How Can I Efficiently Remove XML Namespace Declarations in C#?

XML-Namespace-Deklarationen in C# effizient entfernen

Dieser Artikel bietet eine umfassende Lösung zum Entfernen von Namespace-Deklarationen aus XML-Dokumenten, um die Struktur zu vereinfachen oder bestimmte Anforderungen zu erfüllen.

Frage:

Sie möchten alle Namespace-Deklarationen aus dem XML-Dokument entfernen, um dessen Struktur zu vereinfachen oder bestimmte Anforderungen zu erfüllen.

Schnittstelle:

<code class="language-csharp">public interface IXMLUtils
{
    string RemoveAllNamespaces(string xmlDocument);
}</code>

Beispiel-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>

Erwartete Ausgabe:

<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>

Lösung:

Sie können rekursive Funktionen verwenden, um ein XML-Dokument zu durchlaufen und Namespaces aus allen Elementen zu entfernen. Die Funktion folgt diesen Schritten:

  1. Erstellen Sie für Blattelemente (Elemente ohne untergeordnete Elemente) ein neues Element mit dem lokalen Namen und Wert des ursprünglichen Elements und kopieren Sie alle Attribute.
  2. Erstellen Sie für Elemente mit untergeordneten Elementen ein neues Element mit dem lokalen Namen des ursprünglichen Elements und rufen Sie die Funktion rekursiv für jedes untergeordnete Element auf.

Das Folgende ist die C#-Implementierung der Lösung:

<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>

Diese Lösung ist umfassend und robust und kann sowohl Blatt- als auch Nichtblattelemente effizient verarbeiten. Außerdem bleiben die ursprünglichen Werte und Attribute von XML-Elementen erhalten, wodurch eine zuverlässige und genaue Entfernung von Namespaces gewährleistet wird.

Das obige ist der detaillierte Inhalt vonWie kann ich XML-Namespace-Deklarationen in C# effizient entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn