ゲーマーときどきエンジニア

基本ゲーム記事を書いて、ときどき考えを発信するエンジニアのブログです!

【C#】xmlを読み込む、XDocumentとXElementについて解説します。

こんにちは。たいら(@tairaengineer2)です。
この記事では、C#でxmlを読み込むXDocumentXElementについて解説します。

スポンサーリンク

 

前提条件

この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

XDocumentとXElementについて

C#でxmlを読み込む場合は、XDocumentXElementを使う、とざっくり覚えておけばOKだと思います!
usingは

using System.Xml.Linq;

を使います。

XDocumentとは

XDocument クラスの概要

XDocument クラスには、有効な XML ドキュメントに必要な情報が含まれています。
これには、XML 宣言、処理命令、コメントが含まれます。
XDocument クラスが提供する特定の機能が必要な場合は、XDocument オブジェクトを作成するだけで済みます。
多くの場合、XElementを直接操作できます。
XElementを直接操作するのは、比較的単純なプログラミング モデルです。

XDocument クラスの概要 (C#) | Microsoft Docsから引用させて頂きました

XDocument のコンポーネント

XDocument には、次の要素を含めることができます。
・1つの XDeclaration オブジェクト。
XDeclarationでは、XML 宣言の関連部分である XML バージョン、ドキュメントのエンコード、および XML ドキュメントがスタンドアロンかどうかを指定できます。
・1 つの XElement オブジェクト。
これは XML ドキュメントのルート ノードです。
・任意の数の XProcessingInstruction オブジェクト。
処理命令は、XML を処理するアプリケーションに情報を伝達します。
・任意の数の XComment オブジェクト。
コメントは、ルート要素の兄弟になります。 XML ドキュメントをコメントで始めることは無効であるため、XComment オブジェクトをリストの最初の引数にすることはできません。
・DTD 用の 1 つの XDocumentType。

XDocument クラスの概要 (C#) | Microsoft Docsから引用させて頂きました

XElementとは

XElement クラスの概要 (C#)

XElement クラスは、LINQ to XML の基礎クラスの 1 つです。
これは XML 要素を表します。
このクラスを使用すると、要素の作成、要素のコンテンツの変更、子要素の追加、変更、削除、要素への属性の追加、および要素のコンテンツのテキスト形式へのシリアル化を行うことができます。
System.Xml、XmlReader、XmlWriter などの、XslCompiledTransform の他のクラスと相互運用することもできます。

XElement クラスの概要 (C#) | Microsoft Docsから引用させて頂きました

解説で使うC#の概要

xmlを読み込み、その結果をコンソールに表示するプログラムです。
コンソールプロジェクトを作成するやり方は下の記事をご参考ください。

www.tairax.com

プログラムを作成したあと、ビルドをするやり方はこちらの記事をご参考ください。

www.tairax.com

C#サンプルコード

using System;
using System.Xml.Linq;
using System.Collections.Generic;

/// <summary>
/// xmlを読み込む練習クラス
/// </summary>
namespace ConsoleApp1
{
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            XDocument xDocument = XDocument.Load("[絶対パス]/Product.xml");
            XElement xElement = xDocument.Element("productTable");
            IEnumerable<XElement> boxedLunchRow = xElement.Elements("product");
            foreach (XElement boxedLunchElement in boxedLunchRow)
            {
                XElement name = boxedLunchElement.Element("name");
                XElement price = boxedLunchElement.Element("price");

                Console.WriteLine(name.Value);
                Console.WriteLine(price.Value);
                Console.WriteLine();
            }
        }
    }
}

xmlサンプルコード

xmlの名前は【Product.xml】とします。

Visual Studioでxmlの作り方は、以下の記事をご参考ください。

www.tairax.com

xmlの書き方は、以下の記事をご参考ください。

www.tairax.com

<?xml version="1.0" encoding="utf-8" ?>
<productTable>
  <product>
    <name>幕の内弁当</name>
    <price>498</price>
  </product>
  <product>
    <name>唐揚げ弁当</name>
    <price>398</price>
  </product>
  <product>
    <name>セレブ弁当</name>
    <price>998</price>
  </product>
</productTable>

実行結果

f:id:Tairax:20181227220817p:plain

幕の内弁当
498

唐揚げ弁当
398

セレブ弁当
998

続行するには何かキーを押してください . . .

では、解説していきます!

 

スポンサーリンク

 

解説

  1. xmlを読み込んでいるところ
  2. XDocumentとXElementの関係

の順番で解説します。

xmlを読み込んでいるところ

xmlを読み込んでいるところは、ここです。

XDocument xDocument = XDocument.Load("[絶対パス]/Product.xml");

XDocumentのLoadメソッドとは

Load(String)
ファイルから新しい XDocument を作成します。

public static System.Xml.Linq.XDocument Load (string uri);

パラメーター
uri
String
新しい XDocument に読み込むファイルを参照している URI 文字列。
戻り値
XDocument
指定したファイルの内容を格納している XDocument。

XDocument.Load Method (System.Xml.Linq) | Microsoft Docsから引用させて頂きました

絶対パスを指定してLoadメソッドを使うと、xml全体を取得することができます。
絶対パスについては以下の記事をご参考ください。

www.tairax.com

たとえば↓のように指定して表示すると

using System;
using System.Xml.Linq;
using System.Collections.Generic;

/// <summary>
/// xmlを読み込む練習クラス
/// </summary>
namespace ConsoleApp1
{
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            XDocument xDocument = XDocument.Load("[絶対パス]/Product.xml");
            Console.WriteLine(xDocument);
        }
    }
}

実行結果は

f:id:Tairax:20181228213850p:plain

<productTable>
  <product>
    <name>幕の内弁当</name>
    <price>498</price>
  </product>
  <product>
    <name>唐揚げ弁当</name>
    <price>398</price>
  </product>
  <product>
    <name>セレブ弁当</name>
    <price>998</price>
  </product>
</productTable>
続行するには何かキーを押してください . . .

このようにxml全体の内容をとってきています。
全体の内容を取得しているので

XElement xElement = xDocument.Element("productTable");
IEnumerable<XElement> boxedLunchRow = xElement.Elements("product");

XElementで細かく取得しています。

XDocumentとXElementの関係

指定しているxDocumentとxElementとboxedLunchRowの関係は下記の通りになっています。

f:id:Tairax:20181229164745p:plain

こんな関係なので、foreach文でboxedLunchRowをまわしてコンソールに表示させています。

 

スポンサーリンク

 

まとめ:xmlを読み込んでみよう

以上がxmlを読み込むXDocumentXElementについて解説です。

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

 

ほかにもC#勉強記事を書いてます。
よければご参考ください。

【C#】文字列を数値に変換できるか調べるTryParseメソッドの使い方

【C#】名前付き引数について解説します。

【C#】Visual Studioで使っていないusingを削除する方法を紹介します

今までブログで書いたC#の解説記事のまとめは、こちらをご参考ください。

【C#】ブログで書いた文法記事のまとめ