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
<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
Jawapan:
Untuk menghapuskan
[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!