Share via


LINQ to XML の概要

XML は、多くのコンテキストでデータを書式設定する方法として広く採用されてきました。 たとえば、Web、構成ファイル、Microsoft Office Word ファイル、データベースで XML が使用されています。

LINQ to XML は、XML によるプログラミングのために再設計された最新の方法です。 ドキュメント オブジェクト モデル (DOM) のメモリ内ドキュメント変更機能を備え、LINQ クエリ式をサポートします。 このクエリ式は、XPath と構文は異なりますが、機能が似ています。

LINQ to XML の開発者

LINQ to XML は、さまざまな開発者を対象としています。 何らかの処理を行うだけの平均的な開発者にとっては、LINQ to XML によって SQL と同じようにクエリを作成できるので、XML の操作がより簡単になります。 プログラマは、短時間の学習で簡潔かつ強力なクエリを、選択したプログラミング言語で記述できるようになります。

熟練した開発者は、LINQ to XML を使用することで生産性を大きく高めることができます。 LINQ to XML を使用すると、より少ないコードで、表現性と簡潔性に優れた強力なコードを記述できます。 また、同時に複数のデータ ドメインからクエリ式を使用できます。

LINQ to XML とは

LINQ to XML は、.NET Framework プログラミング言語から XML を操作できるようにする、LINQ に対応したメモリ内 XML プログラミング インターフェイスです。

LINQ to XML は、XML ドキュメントをメモリに読み込むという点で、ドキュメント オブジェクト モデル (DOM) に似ています。 ドキュメントに対するクエリや変更を行うことができ、変更したドキュメントをファイルに保存したり、シリアル化してインターネット経由で送信したりできます。 ただし、LINQ to XML が提供する新しいオブジェクト モデルは、より軽量で操作しやすく、Visual C# 2008 で強化された言語機能を利用している点で、DOM と異なります。

LINQ to XML の最も重要な利点は、統合言語クエリ (LINQ) と統合されていることです。 この統合により、メモリ内の XML ドキュメントに対するクエリを記述して、要素および属性のコレクションを取得できます。 LINQ to XML のクエリ機能は、構文は異なりますが、XPath および XQuery と機能面で互換性があります。 Visual C# 2008 に LINQ が統合されていることで、厳密な型指定とコンパイル時のチェックが可能となり、デバッガー サポートが強化されます。

LINQ to XML のもう 1 つの利点は、クエリの結果を XElement および XAttribute オブジェクト コンストラクターに対するパラメーターとして使用できるので、XML ツリーを作成するための強力な方法が利用可能になります。 関数型構築と呼ばれるこの方法では、開発者が XML ツリーの構造を簡単に変換できます。

たとえば、「サンプル XML ファイル : 一般的な購買発注書 (LINQ to XML)」で説明されているような一般的な XML 購買発注書があるとします。 LINQ to XML を使用することで、次のクエリを実行して購買発注書のすべての品目要素の部品番号属性を取得できます。

IEnumerable<string> partNos =
    from item in purchaseOrder.Descendants("Item")
    select (string) item.Attribute("PartNumber");

Visual Basic では、同じクエリを次のように記述できます。

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Select item.@PartNumber

もう 1 つの例として、金額が $100 を超える品目を部品番号順に並べた一覧が必要であるとします。 この情報を取得するには、次のクエリを実行します。

IEnumerable<XElement> partNos =
    from item in purchaseOrder.Descendants("Item")
    where (int) item.Element("Quantity") *
        (decimal) item.Element("USPrice") > 100
    orderby (string)item.Element("PartNumber")
    select item;

Visual Basic では、同じクエリを次のように記述できます。

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Where (item.<Quantity>.Value * _
           item.<USPrice>.Value) > 100 _
    Order By item.<PartNumber>.Value _
    Select item

これらの LINQ 機能に加え、LINQ to XML では XML プログラミング インターフェイスが機能強化されています。 LINQ to XML を使用すると、次のことを実行できます。

  • ファイルまたはストリームからの XML の読み込み

  • ファイルまたはストリームへの XML のシリアル化

  • 関数型構築を使用した XML の新規作成

  • XPath に類似した軸を使用した XML に対するクエリの実行

  • AddRemoveReplaceWithSetValue などのメソッドを使用した、メモリ内の XML ツリーの操作

  • XSD を使用した XML ツリーの検証

  • 上記の機能を組み合わせて使用した XML ツリーの構造の変換

XML ツリーの作成

LINQ to XML でのプログラミングで最も重要な利点の 1 つは、XML ツリーを簡単に作成できるという点です。 たとえば、小さな XML ツリーを作成するには、次のように C# コードを記述します。

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144", 
                new XAttribute("Type", "Home")),
            new XElement("phone", "425-555-0145",
                new XAttribute("Type", "Work")),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );

Visual Basic では XML リテラルが使用されるため、XML ツリーを構築するためのコードがさらに単純になります。

Dim contacts = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone Type="Home">206-555-0144</Phone>
            <Phone Type="Work">425-555-0145</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

Visual Basic コンパイラは、XML リテラルを LINQ to XML のメソッド呼び出しに変換します。

詳細については、「XML ツリーの作成」を参照してください。

参照

参照

System.Xml.Linq

概念

Visual Basic における LINQ to XML の概要

その他の技術情報

はじめに (LINQ to XML)

Visual Basic における XML