Maison > développement back-end > C++ > Comment supprimer l'élément racine du tableau dans la sérialisation XML ?

Comment supprimer l'élément racine du tableau dans la sérialisation XML ?

Patricia Arquette
Libérer: 2024-12-31 18:30:10
original
889 Les gens l'ont consulté

How to Suppress the Root Array Element in XML Serialization?

Sérialisation XML : suppression de l'élément de tableau racine

Question :

La sérialisation d'un XML est-elle possible l'élément racine de la collection doit-il être désactivé ? Considérons la classe suivante avec des attributs :

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

    [XmlArrayItem("VARIANT")]
    public List<ShopItem> Variants { get; set; }
}
Copier après la connexion

Cette classe génère du XML avec une racine element :

<SHOPITEM xmlns:xsi="" xmlns:xsd="">
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>
Copier après la connexion

Comment les être omis de la sortie ? De plus, comment les espaces de noms xsi et xsd peuvent-ils être supprimés de l'élément racine ?

Réponse :

Pour éliminer l'élément élément, remplacez l'attribut [XmlArrayItem] par [XmlElement] pour la propriété de collection :

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

    [XmlElement("VARIANT")] // was [XmlArrayItem]
    public List<ShopItem> Variants { get; set; }
}
Copier après la connexion

Pour supprimer les espaces de noms xsi et xsd, créez une instance XmlSerializerNamespaces avec un espace de noms vide et utilisez-la pendant la sérialisation :

// ...

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
Copier après la connexion

Le XML résultant aura le format souhaité :

<?xml version="1.0" encoding="ibm850"?>
<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal