次の方法で共有


LINQ to XML の概要

LINQ to XML には、.NET Language-Integrated クエリ (LINQ) フレームワークを利用するインメモリ XML プログラミング インターフェイスが用意されています。 LINQ to XML は .NET 機能を使用し、更新された再設計されたドキュメント オブジェクト モデル (DOM) XML プログラミング インターフェイスに相当します。

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

LINQ to XML は、xml を使用したプログラミングに対する up-to-date の再設計されたアプローチです。 ドキュメント オブジェクト モデル (DOM) のメモリ内ドキュメント変更機能を提供し、LINQ クエリ式をサポートします。 これらのクエリ式は XPath とは構文的に異なりますが、同様の機能を提供します。

LINQ to XML 開発者

LINQ to XML は、さまざまな開発者を対象としています。 単に何かを行いたいだけの平均的な開発者にとって、LINQ to XML は SQL に似たクエリ エクスペリエンスを提供することで XML を簡単にします。 プログラマは、少しの学習だけで、選択したプログラミング言語で簡潔で強力なクエリを記述することを学ぶことができます。

プロフェッショナルな開発者は、LINQ to XML を使用して生産性を大幅に向上させることができます。 LINQ to XML を使用すると、より表現力が高く、コンパクトで強力なコードを記述する必要が少なくなります。 複数のデータ ドメインのクエリ式を同時に使用できます。

LINQ to XML は XML プログラミング インターフェイスです

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

LINQ to XML は、XML ドキュメントをメモリに取り込むという点で、ドキュメント オブジェクト モデル (DOM) に似ています。 ドキュメントのクエリと変更を行うことができます。ドキュメントを変更した後、ファイルに保存したり、シリアル化してインターネット経由で送信したりできます。 ただし、LINQ to XML は DOM とは異なります。

  • 軽量で使いやすい新しいオブジェクト モデルを提供します。
  • C# と Visual Basic の言語機能を利用します。

LINQ to XML の最も重要な利点は、Language-Integrated クエリ (LINQ) との統合です。 この統合により、インメモリ XML ドキュメントに対してクエリを記述して、要素と属性のコレクションを取得できます。 LINQ to XML のクエリ機能は、XPath および XQuery と同等の機能 (構文ではありません) です。 C# と Visual Basic での LINQ の統合により、より強力な型指定、コンパイル時のチェック、デバッガーのサポートの強化が提供されます。

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

たとえば、「サンプル XML ファイル: 一般的な発注書」の説明に従って 、一般的な XML 発注書があるとします。 LINQ to XML を使用すると、次のクエリを実行して、発注書内のすべての項目要素の部品番号属性値を取得できます。

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<string> partNos =  from item in purchaseOrder.Descendants("Item")
                               select (string) item.Attribute("PartNumber");
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

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

C# では、これはメソッド構文形式で書き換えることができます。

IEnumerable<string> partNos = purchaseOrder.Descendants("Item").Select(x => (string) x.Attribute("PartNumber"));

別の例として、100 ドルを超える値を持つアイテムのリストを部品番号で並べ替えることができます。 この情報を取得するには、次のクエリを実行します。

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<XElement> pricesByPartNos =  from item in purchaseOrder.Descendants("Item")
                                 where (int) item.Element("Quantity") * (decimal) item.Element("USPrice") > 100
                                 orderby (string)item.Element("PartNumber")
                                 select item;
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

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

ここでも、C# では、これはメソッド構文形式で書き換えることができます。

IEnumerable<XElement> pricesByPartNos = purchaseOrder.Descendants("Item")
                                        .Where(item => (int)item.Element("Quantity") * (decimal)item.Element("USPrice") > 100)
                                        .OrderBy(order => order.Element("PartNumber"));

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

  • ファイルまたはストリームから XML を読み込みます
  • XML をファイルまたはストリームにシリアル化します。
  • 関数型構築を使用して XML をゼロから作成します。
  • XPath に似た軸を使用して XML にクエリを実行します。
  • AddRemoveReplaceWithSetValueなどのメソッドを使用して、インメモリ XML ツリーを操作します。
  • XSD を使用して XML ツリーを検証します。
  • これらの機能の組み合わせを使用して、XML ツリーをある図形から別の図形に変換します。

XML ツリーを作成する

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

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")
        )
    )
);
Dim contacts As XElement = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone>206-555-0144</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

この例の Visual Basic バージョンでは、XML リテラルを使用します。 C# バージョンと同様に、Visual Basic で XElement を使用することもできます。

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

こちらも参照ください