Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengeluarkan Perisytiharan Ruang Nama XML dengan Cekap dalam C#?

Bagaimanakah Saya Boleh Mengeluarkan Perisytiharan Ruang Nama XML dengan Cekap dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-23 22:44:13625semak imbas

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

Alih keluar pengisytiharan ruang nama XML dengan cekap dalam C#

Artikel ini menyediakan penyelesaian komprehensif untuk mengalih keluar pengisytiharan ruang nama daripada dokumen XML untuk memudahkan struktur atau memenuhi keperluan khusus.

Soalan:

Anda ingin mengalih keluar semua pengisytiharan ruang nama daripada dokumen XML untuk memudahkan strukturnya atau memenuhi keperluan khusus.

Antara Muka:

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

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

Keluaran yang dijangkakan:

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

Penyelesaian:

Anda boleh menggunakan fungsi rekursif untuk mengulangi dokumen XML dan mengalih keluar ruang nama daripada semua elemen. Fungsi mengikut langkah berikut:

  1. Untuk elemen daun (elemen tanpa anak), cipta elemen baharu dengan nama setempat dan nilai elemen asal dan salin sebarang atribut.
  2. Untuk elemen dengan elemen kanak-kanak, cipta elemen baharu dengan nama tempatan elemen asal dan panggil fungsi secara rekursif untuk setiap elemen kanak-kanak.

Berikut ialah pelaksanaan C# bagi penyelesaian:

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

Penyelesaian ini komprehensif dan teguh serta boleh mengendalikan kedua-dua elemen daun dan bukan daun dengan cekap. Ia juga mengekalkan nilai dan sifat asal unsur XML, memastikan penyingkiran ruang nama yang boleh dipercayai dan tepat.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Perisytiharan Ruang Nama XML dengan Cekap dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn