Heim >Backend-Entwicklung >C++ >Wie entferne ich das Root-Element aus einem XML-Array mit XmlSerializer?

Wie entferne ich das Root-Element aus einem XML-Array mit XmlSerializer?

Susan Sarandon
Susan SarandonOriginal
2024-12-29 20:53:18810Durchsuche

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

XML-Serialisierung: Deaktivieren des Stammelements eines Arrays

Bei der XML-Serialisierung ist es oft wünschenswert, die Darstellung des Stammelements für Sammlungen zu unterdrücken. Dadurch können XML-Strukturen vereinfacht und die Lesbarkeit verbessert werden. In diesem Artikel wird erläutert, wie Sie dies mit dem XmlSerializer von ASP.NET erreichen.

Betrachten Sie die folgende ShopItem-Klasse mit XML-Serialisierungsattributen:

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

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

Das Serialisieren einer Instanz dieser Klasse erzeugt das folgende 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>

Wie Sie sehen, ist ein unerwünschter Wurzelelement vorhanden ist. Um das Rendern zu deaktivieren, müssen Sie das Attribut [XmlArrayItem] durch [XmlElement] ersetzen.

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

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

Diese Änderung führt zu folgendem vereinfachten XML:

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

Außerdem kann Folgendes auftreten XML-Namespaces wie xsi und xsd im Root-Element. Um diese zu entfernen, erstellen Sie eine XmlSerializerNamespaces-Instanz mit einem leeren Namespace und übergeben Sie ihn während der Serialisierung.

Hier ist ein Beispiel:

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

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

Dadurch werden die unerwünschten Namespaces aus der XML-Ausgabe entfernt.

Das obige ist der detaillierte Inhalt vonWie entferne ich das Root-Element aus einem XML-Array mit XmlSerializer?. 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