首頁 >後端開發 >C++ >如何使用 XmlSerializer 從 XML 陣列中刪除根元素?

如何使用 XmlSerializer 從 XML 陣列中刪除根元素?

Susan Sarandon
Susan Sarandon原創
2024-12-29 20:53:18807瀏覽

How to Remove the Root Element from an XML Array Using XmlSerializer?

XML 序列化:停用陣列的根元素

在 XML 序列化中,通常需要抑制集合根元素的呈現。這可以簡化 XML 結構並提高可讀性。本文介紹如何使用 ASP.NET 的 XmlSerializer 來實現此目的。

考慮以下具有XML 序列化屬性的ShopItem 類別:

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

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

序列化此類別的實例會產生以下XML:

<SHOPITEM xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>

如您所見,一個不需要的根元素存在。若要停用其渲染,您需要將 [XmlArrayItem] 屬性替換為 [XmlElement]。

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

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

此修改會產生以下簡化的 XML:

<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>

此外,您可能會遇到XML 命名空間,例如根元素中的 xsi 和 xsd。若要刪除這些,請建立一個具有空命名空間的 XmlSerializerNamespaces 實例,並在序列化期間傳遞它。

以下是一個範例:

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

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

這將從 XML 輸出中消除不需要的命名空間。

以上是如何使用 XmlSerializer 從 XML 陣列中刪除根元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn