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

XML ドキュメント オブジェクト モデル (DOM) クラスは、XML ドキュメントのメモリ内表現です。The XML Document Object Model (DOM) class is an in-memory representation of an XML document. DOM を使用すると、XML ドキュメントの読み込み、操作、および変更をプログラムから実行できます。The DOM allows you to programmatically read, manipulate, and modify an XML document. XmlReader クラスも XML を読み込めますが、非キャッシュ、前方参照専用、読み取り専用のアクセスしか実行できません。The XmlReader class also reads XML; however, it provides non-cached, forward-only, read-only access. つまり、XmlReader には、属性の値または要素のコンテンツを編集する機能や、ノードを挿入したり削除したりする機能はありません。This means that there are no capabilities to edit the values of an attribute or content of an element, or the ability to insert and remove nodes with the XmlReader. DOM の主な機能は編集です。Editing is the primary function of the DOM. XML データは、通常、メモリ上では構造的に表現されますが、実際の XML データをファイルに保存したり、別のオブジェクトから取り込む場合は、直線的な形式で格納されます。It is the common and structured way that XML data is represented in memory, although the actual XML data is stored in a linear fashion when in a file or coming in from another object. XML データの例を次に示します。The following is XML data.

入力Input

<?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 構造に読み込まれるとき、メモリがどのように構造化されるかを次の図に示します。The following illustration shows how memory is structured when this XML data is read into the DOM structure.

XML ドキュメントの構造XML document structure
XML ドキュメントの構造XML document structure

図中のそれぞれの円は、XML ドキュメント構造における 1 つのノードを表します。これは XmlNode オブジェクトと呼ばれます。Within the XML document structure, each circle in this illustration represents a node, which is called an XmlNode object. XmlNode オブジェクトは、DOM ツリーの基本オブジェクトです。The XmlNode object is the basic object in the DOM tree. XmlNode を拡張する XmlDocument クラスは、たとえばドキュメントをメモリに読み込んだり、XML をファイルに保存するなど、ドキュメント全体を操作するメソッドをサポートしています。The XmlDocument class, which extends XmlNode, supports methods for performing operations on the document as a whole (for example, loading it into memory or saving the XML to a file. さらに XmlDocument では、XML ドキュメント全体のノードを参照して操作する手段も提供されます。In addition, XmlDocument provides a means to view and manipulate the nodes in the entire XML document. XmlNodeXmlDocument は、いずれもパフォーマンスと使いやすさが向上しており、次の操作を実行するメソッドとプロパティを持っています。Both XmlNode and XmlDocument have performance and usability enhancements and have methods and properties to:

  • 要素ノード、エンティティ参照ノードなど、DOM に固有のノードへのアクセスと変更。Access and modify nodes specific to the DOM, such as element nodes, entity reference nodes, and so on.

  • 要素ノードのテキストなど、ノードに格納されている情報およびノード全体の取得。Retrieve entire nodes, in addition to the information the node contains, such as the text in an element node.

    注意

    アプリケーションが DOM の提供する構造や編集機能を必要としない場合は、XmlReader クラスと XmlWriter クラスを使って XML への非キャッシュ、前方参照専用のストリーム アクセスを実行できます。If an application does not require the structure or editing capabilities provided by the DOM, the XmlReader and XmlWriter classes provide non-cached, forward-only stream access to XML. 詳細については、次のトピックを参照してください。 XmlReader および XmlWriterFor more information, see XmlReader and XmlWriter.

Node オブジェクトには、適切に定義された基本的な特性と、メソッドおよびプロパティのセットが含まれます。Node objects have a set of methods and properties, as well as basic and well-defined characteristics. オブジェクトが持つ特性のいくつかを次に示します。Some of these characteristics are:

  • ノードは 1 つの親ノードを持っています。親ノードはノードの 1 つ上のノードです。Nodes have a single parent node, a parent node being a node directly above them. ドキュメント ルートは最上位のノードであり、ドキュメント自身とドキュメント フラグメントしか格納されていないため、親ノードを持っていないノードはドキュメント ルートだけです。The only nodes that do not have a parent is the Document root, as it is the top-level node and contains the document itself and document fragments.

  • ほとんどのノードは、複数の子ノードを持つことができます。子ノードは、ノードの 1 つ下のノードです。Most nodes can have multiple child nodes, which are nodes directly below them. 子ノードを持つことができるノード型の一覧を次に示します。The following is a list of node types that can have child nodes.

    • DocumentDocument

    • DocumentFragmentDocumentFragment

    • EntityReferenceEntityReference

    • 要素Element

    • 属性Attribute

    XmlDeclaration ノード、Notation ノード、Entity ノード、CDATASection ノード、Text ノード、Comment ノード、ProcessingInstruction ノード、DocumentType ノードは子ノードを持ちません。The XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction, and DocumentType nodes do not have child nodes.

  • 図中に book および pubinfo として同レベルに表現されているノードは兄弟です。Nodes that are at the same level, represented in the diagram by the book and pubinfo nodes, are siblings.

DOM の特性の 1 つは、属性の取り扱い方法にあります。One characteristic of the DOM is how it handles attributes. 属性は、互いに親子関係や兄弟関係を持つノードではありません。Attributes are not nodes that are part of the parent, child, and sibling relationships. 属性は要素ノードのプロパティと見なされ、名前と値ペアから構成されます。Attributes are considered a property of the element node and are made up of a name and a value pair. たとえば、要素 format="dollar に関連付けられている price" という形式の XML データがある場合は、単語 format が名前になり、format 属性の値は dollar になります。For example, if you have XML data consisting of format="dollar" associated with the element price, the word format is the name, and the value of the format attribute is dollar. price ノードの format="dollar" 属性を取得するには、カーソルが price 要素ノード上にあるときに GetAttribute メソッドを呼び出します。To retrieve the format="dollar" attribute of the price node, you call the GetAttribute method when the cursor is located at the price element node. 詳細については、「DOM の属性へのアクセス」を参照してください。For more information, see Accessing Attributes in the DOM.

XML をメモリに読み込むと、ノードが作成されます。As XML is read into memory, nodes are created. ただし、すべてのノードが同じタイプというわけではありません。However, not all nodes are the same type. XML の要素の規則と構文は、処理命令の規則と構文とは異なります。An element in XML has different rules and syntax than a processing instruction. したがって、さまざまなデータが読み込まれるときに、個々のノードにノード型が割り当てられます。Therefore, as various data is read, a node type is assigned to each node. このノード型によって、ノードの特性と機能が決定されます。This node type determines the characteristics and functionality of the node.

メモリに生成されるノード型の詳細については、「XML ノードの種類」を参照してください。For more information on the types of nodes generated in memory, see Types of XML Nodes. ノード ツリーに作成されるオブジェクトの詳細については、「オブジェクト階層の XML データへのマップ」を参照してください。For more information on the objects created in the node tree, see Mapping the Object Hierarchy to XML Data.

Microsoft では、XML ドキュメントの操作を容易にするために、W3C (World Wide Web Consortium) DOM Level 1 および Level 2 で規定されている API を拡張しています。Microsoft has extended the APIs that are available in the World Wide Web Consortium (W3C) DOM Level 1 and Level 2 to make it easier to work with an XML document. W3C の標準を完全にサポートする一方で、追加のクラス、メソッド、プロパティにより、W3C の XML DOM で実現できる以上の機能が付加されています。While fully supporting the W3C standards, the additional classes, methods, and properties add functionality beyond what can be done using the W3C XML DOM. 新しいクラスを使用すると、リレーショナル データにアクセスし、ADO.NET との同期をとりながら、データを XML として公開できます。New classes enable you to access relational data, giving you methods for synchronizing with ADO.NET data, simultaneously exposing data as XML. 詳細については、「Dataset と XmlDataDocument の同期」を参照してください。For more information, see Synchronizing a DataSet with an XmlDataDocument.

DOM が最も役に立つのは、XML データをメモリに読み込み、その構造を変更したり、ノードを追加または削除したり、要素内のテキストとしてノードが保持しているデータを変更したりする場合です。The DOM is most useful for reading XML data into memory to change its structure, to add or remove nodes, or to modify the data held by a node as in the text contained by an element. ただし、他のクラスも用意されており、シナリオによっては DOM より高速になる場合もあります。However, other classes are available that are faster than the DOM in other scenarios. XML に対して高速、非キャッシュ、前方参照専用のストリーム アクセスを行うには、XmlReaderXmlWriter を使用します。For fast, non-cached, forward-only stream access to XML, use the XmlReader and XmlWriter. カーソル モデルと XPath を使用したランダム アクセスが必要な場合は、XPathNavigator クラスを使用します。If you need random access with a cursor model and XPath, use the XPathNavigator class.

関連項目See also