こんにちは。たいら(@tairaengineer2)です。
この記事では、C#でxmlを読み込むXDocumentとXElementについて解説します。
スポンサーリンク
前提条件
この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。
XDocumentとXElementについて
C#でxmlを読み込む場合は、XDocumentとXElementを使う、とざっくり覚えておけば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を読み込み、その結果をコンソールに表示するプログラムです。
コンソールプロジェクトを作成するやり方は下の記事をご参考ください。
プログラムを作成したあと、ビルドをするやり方はこちらの記事をご参考ください。
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の作り方は、以下の記事をご参考ください。
xmlの書き方は、以下の記事をご参考ください。
<?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>
実行結果
幕の内弁当
498
唐揚げ弁当
398
セレブ弁当
998
続行するには何かキーを押してください . . .
では、解説していきます!
スポンサーリンク
解説
- xmlを読み込んでいるところ
- 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全体を取得することができます。
絶対パスについては以下の記事をご参考ください。
たとえば↓のように指定して表示すると
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);
}
}
}
実行結果は
<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の関係は下記の通りになっています。
こんな関係なので、foreach文でboxedLunchRowをまわしてコンソールに表示させています。
スポンサーリンク
まとめ:xmlを読み込んでみよう
以上がxmlを読み込むXDocumentとXElementについて解説です。
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
ほかにもC#勉強記事を書いてます。
よければご参考ください。
【C#】文字列を数値に変換できるか調べるTryParseメソッドの使い方
【C#】Visual Studioで使っていないusingを削除する方法を紹介します
今までブログで書いたC#の解説記事のまとめは、こちらをご参考ください。