Maison >développement back-end >C++ >Comment supprimer l'élément racine d'un tableau XML à l'aide de XmlSerializer ?

Comment supprimer l'élément racine d'un tableau XML à l'aide de XmlSerializer ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-29 20:53:18810parcourir

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

Sérialisation XML : désactivation de l'élément racine d'un tableau

Dans la sérialisation XML, il est souvent souhaitable de supprimer le rendu de l'élément racine pour les collections. Cela peut simplifier les structures XML et améliorer la lisibilité. Cet article explique comment y parvenir à l'aide de XmlSerializer d'ASP.NET.

Considérez la classe ShopItem suivante avec des attributs de sérialisation XML :

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

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

La sérialisation d'une instance de cette classe produit le XML suivant :

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

Comme vous pouvez le constater, un l'élément racine est présent. Pour désactiver son rendu, vous devez remplacer l'attribut [XmlArrayItem] par [XmlElement].

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

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

Cette modification donne le XML simplifié suivant :

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

De plus, vous pouvez rencontrer Espaces de noms XML tels que xsi et xsd dans l'élément racine. Pour les supprimer, créez une instance XmlSerializerNamespaces avec un espace de noms vide et transmettez-la lors de la sérialisation.

Voici un exemple :

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

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

Cela éliminera les espaces de noms indésirables de la sortie XML.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn