Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk menindas Elemen Tatasusunan Akar dalam Pensirian XML?

Bagaimana untuk menindas Elemen Tatasusunan Akar dalam Pensirian XML?

Patricia Arquette
Patricia Arquetteasal
2024-12-31 18:30:10922semak imbas

How to Suppress the Root Array Element in XML Serialization?

Pensiri XML: Menekan Elemen Tatasusunan Akar

Soalan:

Boleh bersiri XML elemen akar koleksi dilumpuhkan? Pertimbangkan kelas berikut dengan atribut:

[XmlRoot(ElementName="SHOPITEM", Namespace="")]
public class ShopItem
{
    [XmlElement("PRODUCTNAME")]
    public string ProductName { get; set; }  

    [XmlArrayItem("VARIANT")]
    public List<ShopItem> Variants { get; set; }
}

Kelas ini menjana XML dengan akar elemen:

<SHOPITEM xmlns:xsi="" xmlns:xsd="">
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>

Bagaimana boleh diketepikan daripada output? Selain itu, bagaimanakah ruang nama xsi dan xsd boleh dialih keluar daripada elemen akar?

Jawapan:

Untuk menghapuskan elemen, gantikan atribut [XmlArrayItem] dengan [XmlElement] untuk sifat koleksi:

[XmlRoot("SHOPITEM")]
public class ShopItem
{
    [XmlElement("PRODUCTNAME")]
    public string ProductName { get; set; }

    [XmlElement("VARIANT")] // was [XmlArrayItem]
    public List<ShopItem> Variants { get; set; }
}

Untuk mengalih keluar ruang nama xsi dan xsd, buat contoh XmlSerializerNamespaces dengan ruang nama kosong dan gunakannya semasa penyirian:

// ...

ShopItem item = new ShopItem() { ProductName = "test", ... };

// This removes the xsi/xsd namespaces from serialization
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns); // Pass XmlSerializerNamespaces here

XML yang terhasil akan mempunyai format yang diingini:

<?xml version="1.0" encoding="ibm850"?>
<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>

Atas ialah kandungan terperinci Bagaimana untuk menindas Elemen Tatasusunan Akar dalam Pensirian XML?. 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
Artikel sebelumnya:CS- Minggu 4Artikel seterusnya:CS- Minggu 4