次の方法で共有


XML ドキュメント オブジェクト モデル (DOM)

XML ドキュメント オブジェクト モデル (DOM) クラスは、XML ドキュメントのメモリ内表現です。 DOM を使用すると、プログラムで XML ドキュメントの読み取り、操作、および変更を行えます。 XmlReader クラスは XML も読み取ります。ただし、キャッシュされていない順方向専用の読み取り専用アクセスが提供されます。 つまり、要素の属性またはコンテンツの値を編集する機能や、 XmlReader を使用してノードを挿入および削除する機能はありません。 編集は DOM の主な機能です。 XML データはメモリ内で表される一般的で構造化された方法ですが、実際の XML データは、ファイル内または別のオブジェクトから入ってくるときに線形形式で格納されます。 XML データを次に示します。

インプット

<?xml version="1.0"?>
  <books>
    <book>
        <author>Carson</author>
        <price format="dollar">31.95</price>
        <pubdate>05/01/2001</pubdate>
    </book>
    <pubinfo>
        <publisher>MSPress</publisher>
        <state>WA</state>
    </pubinfo>
  </books>

次の図は、この XML データが DOM 構造体に読み込まれるときにメモリがどのように構造化されるかを示しています。

XML ドキュメント構造 XML ドキュメント構造

XML ドキュメント構造内では、この図の各円は、 XmlNode オブジェクトと呼ばれるノードを表します。 XmlNode オブジェクトは、DOM ツリーの基本オブジェクトです。 XmlNode を拡張する XmlDocument クラスは、ドキュメント全体に対して操作を実行するためのメソッドをサポートします (たとえば、ドキュメントをメモリに読み込むか、XML をファイルに保存します)。 さらに、 XmlDocument には、XML ドキュメント全体のノードを表示および操作するための手段が用意されています。 XmlNodeXmlDocument の両方にパフォーマンスと使いやすさが強化されており、次のメソッドとプロパティがあります。

  • 要素ノード、エンティティ参照ノードなど、DOM に固有のノードにアクセスして変更します。

  • 要素ノード内のテキストなど、ノードに含まれる情報に加えて、ノード全体を取得します。

    アプリケーションが DOM によって提供される構造または編集機能を必要としない場合、 XmlReader クラスと XmlWriter クラスは 、XML へのキャッシュされていない順方向専用ストリーム アクセスを提供します。 詳細については、「XmlReaderXmlWriter」を参照してください。

ノード オブジェクトには、一連のメソッドとプロパティ、および基本的な特性と明確に定義された特性があります。 これらの特性の一部を次に示します。

  • ノードには単一の親ノードがあり、親ノードはノードのすぐ上にあります。 親を持たないノードはドキュメント ルートのみです。ドキュメント ルートは最上位ノードであり、ドキュメント自体とドキュメント フラグメントが含まれています。

  • ほとんどのノードには複数の子ノードを含めることができます。これは、その直下のノードです。 子ノードを持つノードの種類の一覧を次に示します。

    • ドキュメント

    • DocumentFragment

    • エンティティ参照

    • 要素

    • 属性

    XmlDeclarationNotationEntityCDATASectionTextCommentProcessingInstructionおよび DocumentType ノードには子ノードがありません。

  • book ノードと pubinfo ノードによって図で表される同じレベルのノードは兄弟です。

DOM の特徴の 1 つは、属性の処理方法です。 属性は、親、子、および兄弟のリレーションシップの一部であるノードではありません。 属性は要素ノードのプロパティと見なされ、名前と値のペアで構成されます。 たとえば、要素format="dollarに関連付けられた price" で構成される XML データがある場合、format という単語は名前であり、format属性の値はdollarformat="dollar"ノードの属性を取得するには、カーソルが要素ノードにあるときに price メソッドを呼び出します。 詳細については、「 DOM での属性へのアクセス」を参照してください。

XML がメモリに読み込まれると、ノードが作成されます。 ただし、すべてのノードが同じ型であるわけではありません。 XML の要素には、処理命令とは異なる規則と構文があります。 したがって、さまざまなデータが読み取られた場合、ノードの種類が各ノードに割り当てられます。 このノード タイプは、ノードの特性と機能を決定します。

メモリ内で生成されるノードの種類の詳細については、「 XML ノードの種類」を参照してください。 ノード ツリーで作成されるオブジェクトの詳細については、「 オブジェクト階層を XML データにマッピングする」を参照してください。

Microsoft は、XML ドキュメントの操作を容易にするために、World Wide Web Consortium (W3C) DOM レベル 1 およびレベル 2 で利用できる API を拡張しました。 W3C 標準を完全にサポートしながら、追加のクラス、メソッド、およびプロパティによって、W3C XML DOM を使用して実行できる機能を超える機能が追加されます。 新しいクラスを使用すると、リレーショナル データにアクセスして、ADO.NET データと同期し、データを XML として同時に公開する方法を提供できます。 詳細については、「 XmlDataDocument を使用した DataSet の同期」を参照してください。

DOM は、XML データをメモリに読み込んで構造を変更したり、ノードを追加または削除したり、要素に含まれるテキストのようにノードが保持するデータを変更したりする場合に最も便利です。 ただし、他のシナリオでは DOM よりも高速な他のクラスを使用できます。 XML への高速でキャッシュされていない順方向のみのストリーム アクセスには、 XmlReaderXmlWriter を使用します。 カーソル モデルと XPath を使用したランダム アクセスが必要な場合は、 XPathNavigator クラスを使用します。

こちらも参照ください