ホームページ > バックエンド開発 > C++ > XmlSerializer を使用して XML 配列からルート要素を削除する方法

XmlSerializer を使用して XML 配列からルート要素を削除する方法

Susan Sarandon
リリース: 2024-12-29 20:53:18
オリジナル
785 人が閲覧しました

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>
ログイン後にコピー

さらに、次のような問題が発生する可能性があります。ルート要素内の xsi や xsd などの XML 名前空間。これらを削除するには、空の名前空間を持つ XmlSerializerNamespaces インスタンスを作成し、シリアル化中にそれを渡します。

次に例を示します:

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

XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns);
ログイン後にコピー

これにより、XML 出力から不要な名前空間が削除されます。

以上がXmlSerializer を使用して XML 配列からルート要素を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート