カテゴリ: C# 更新日: 2025/11/13

C#でXMLファイルを操作する方法(XmlDocument・LINQ to XML)を初心者向けに解説!

C#でXMLファイルを操作する方法(XmlDocument・LINQ to XML)
C#でXMLファイルを操作する方法(XmlDocument・LINQ to XML)

先生と生徒の会話形式で理解しよう

生徒

「先生、C#でXMLファイルを読み書きするにはどうしたらいいですか?」

先生

「いい質問ですね。XMLファイルはデータを階層的に保存する形式で、C#でも簡単に操作できますよ。」

生徒

「階層的っていうのは、フォルダの中にファイルがあるような構造ですか?」

先生

「そうです!XMLは“親子関係”を持つデータ構造なんです。今日はXmlDocumentクラスとLINQ to XMLという2つの方法で、XMLを操作する方法を学びましょう。」

1. XMLファイルとは?

1. XMLファイルとは?
1. XMLファイルとは?

XML(eXtensible Markup Language)とは、データを「タグ」で囲んで表現するファイル形式です。HTMLと似ていますが、表示目的ではなくデータを保存・やりとりするために使われます。

たとえば、次のような内容がXMLファイルです。


<books>
    <book>
        <title>はじめてのC#</title>
        <author>山田太郎</author>
    </book>
    <book>
        <title>LINQ入門</title>
        <author>佐藤花子</author>
    </book>
</books>

この例では、<books>が親要素で、<book>が子要素になっています。XMLファイルを読み取るときは、この親子関係をたどってデータを取得します。

2. XmlDocumentを使ってXMLを読み取る方法

2. XmlDocumentを使ってXMLを読み取る方法
2. XmlDocumentを使ってXMLを読み取る方法

XmlDocumentクラスは、XMLファイルをツリー構造(木の枝のような階層)として読み書きできるクラスです。C#の標準ライブラリで利用できます。

まずは、XMLを読み込んで中のデータを表示してみましょう。


using System;
using System.Xml;

class Program
{
    static void Main()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("books.xml"); // XMLファイルを読み込む

        XmlNodeList books = doc.GetElementsByTagName("book");

        foreach (XmlNode book in books)
        {
            string title = book["title"].InnerText;
            string author = book["author"].InnerText;
            Console.WriteLine($"タイトル: {title}, 著者: {author}");
        }
    }
}

タイトル: はじめてのC#
著者: 山田太郎
タイトル: LINQ入門
著者: 佐藤花子

Load()メソッドでXMLを読み込み、GetElementsByTagName()で特定のタグをまとめて取得しています。InnerTextプロパティを使うと、タグの中の文字データを取得できます。

3. XmlDocumentでXMLを書き込む方法

3. XmlDocumentでXMLを書き込む方法
3. XmlDocumentでXMLを書き込む方法

次に、C#から新しくXMLファイルを作成してみましょう。


using System;
using System.Xml;

class Program
{
    static void Main()
    {
        XmlDocument doc = new XmlDocument();

        XmlElement root = doc.CreateElement("books");
        doc.AppendChild(root);

        XmlElement book = doc.CreateElement("book");

        XmlElement title = doc.CreateElement("title");
        title.InnerText = "C#超入門";
        book.AppendChild(title);

        XmlElement author = doc.CreateElement("author");
        author.InnerText = "田中一郎";
        book.AppendChild(author);

        root.AppendChild(book);

        doc.Save("new_books.xml"); // 保存
        Console.WriteLine("XMLファイルを作成しました。");
    }
}

XMLファイルを作成しました。

CreateElement()で新しいタグを作り、AppendChild()で親要素に追加しています。最後にSave()でファイルとして出力します。

4. LINQ to XMLを使ったスマートな操作

4. LINQ to XMLを使ったスマートな操作
4. LINQ to XMLを使ったスマートな操作

XmlDocumentでも十分ですが、もっと簡単に扱いたいときはLINQ to XMLが便利です。LINQ(Language Integrated Query)は、データを検索・操作するためのC#の機能です。

まずは、XMLを読み込んでデータを表示する例を見てみましょう。


using System;
using System.Linq;
using System.Xml.Linq;

class Program
{
    static void Main()
    {
        XDocument xdoc = XDocument.Load("books.xml");

        var books = from b in xdoc.Descendants("book")
                    select new
                    {
                        Title = b.Element("title")?.Value,
                        Author = b.Element("author")?.Value
                    };

        foreach (var book in books)
        {
            Console.WriteLine($"タイトル: {book.Title}, 著者: {book.Author}");
        }
    }
}

タイトル: はじめてのC#
著者: 山田太郎
タイトル: LINQ入門
著者: 佐藤花子

XDocumentはLINQ専用のXMLクラスです。LINQの構文を使って「bookタグの中にあるtitleauthorを取り出す」といった操作を簡潔に書けます。

5. LINQ to XMLでXMLを書き出す

5. LINQ to XMLでXMLを書き出す
5. LINQ to XMLでXMLを書き出す

LINQ to XMLでは、C#のオブジェクト構文を使って、直感的にXMLを作成できます。


using System;
using System.Xml.Linq;

class Program
{
    static void Main()
    {
        XElement books =
            new XElement("books",
                new XElement("book",
                    new XElement("title", "C#応用編"),
                    new XElement("author", "鈴木太郎")
                ),
                new XElement("book",
                    new XElement("title", "XML完全ガイド"),
                    new XElement("author", "佐々木花子")
                )
            );

        books.Save("linq_books.xml");
        Console.WriteLine("LINQでXMLファイルを作成しました。");
    }
}

LINQでXMLファイルを作成しました。

このように、XElementを使うと入れ子構造をそのまま書けるので、コードが非常に読みやすくなります。

6. XmlDocumentとLINQ to XMLの使い分け

6. XmlDocumentとLINQ to XMLの使い分け
6. XmlDocumentとLINQ to XMLの使い分け

最後に、それぞれの特徴をまとめます。

  • XmlDocument:昔からある方法で、細かいノード操作に向いている。
  • LINQ to XML:コードが簡潔で、読み書きがスマート。新しい開発ではこちらが主流。

どちらもXML操作には便利なツールなので、目的に応じて使い分けましょう。

カテゴリの一覧へ
新着記事
C#でタイムスタンプの精度を上げるためのテクニックを徹底解説!(初心者向け)
C#のコーディング規約(C# Coding Conventions)とは?読みやすいコードを書くための基本ルール
C#のデストラクタ(ファイナライザ)の使い方と注意点をやさしく解説!
COBOL資産のバージョン管理とは?初心者でもわかる保守と管理の基本
人気記事
No.1
Java&Spring記事人気No1
COBOLで学ぶSELECT文のORDER BY・GROUP BY活用法!初心者でもわかるデータ集計
No.2
Java&Spring記事人気No2
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.4
Java&Spring記事人気No4
COBOLで学ぶカーソル操作と複数行データ取得の基本
No.5
Java&Spring記事人気No5
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
No.7
Java&Spring記事人気No7
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.8
Java&Spring記事人気No8
C#の日付型(DateTime)と基本的な使い方を解説|初心者向け入門ガイド