XDocument クラスの概要

XDocument クラスには、XML 宣言、処理命令、コメントなど、有効な XML ドキュメントに必要な情報が含まれています。

XDocument クラスが提供する特定の機能が必要な場合は、XDocument オブジェクトを作成するだけで済みます。 多くの場合、XElement を直接操作できます。 XElement を直接操作するのは、比較的単純なプログラミング モデルです。

XDocumentXContainer から派生するため、子ノードを含めることができます。 ただし、XDocument オブジェクトに格納できる子 XElement ノードは 1 つだけです。 これは、XML ドキュメントにルート要素を 1 つしか持てないという XML 標準を反映しています。

XDocument のコンポーネント

XDocument には、次の要素を含めることができます。

  • 1 つの XDeclaration オブジェクト。 XDeclaration では、XML 宣言の関連部分である XML バージョン、ドキュメントのエンコード、および XML ドキュメントがスタンドアロンかどうかを指定できます。
  • 1 つの XElement オブジェクト。 このオブジェクトは XML ドキュメントのルート ノードです。
  • 任意の数の XProcessingInstruction オブジェクト。 処理命令は、XML を処理するアプリケーションに情報を伝達します。
  • 任意の数の XComment オブジェクト。 コメントは、ルート要素の兄弟になります。
  • DTD 用の 1 つの XDocumentType

XDocument をシリアル化すると、XDocument.Declarationnull である場合でも、作成者が Writer.Settings.OmitXmlDeclarationfalse (既定値) に設定していれば、出力には XML 宣言が含まれます。

既定では、LINQ to XML によってバージョンが "1.0" に、エンコードが "UTF-8" に設定されます。

XDocument なしで XElement を使用する

既に説明したように、XElement クラスは LINQ to XML プログラミング インターフェイスのメイン クラスです。 多くの場合、アプリケーションはドキュメントの作成を必要としません。 XElement クラスを使用すると次のことが可能です。

  • XML ツリーを作成します。
  • それに他の XML ツリーを追加します。
  • XML ツリーを変更します。
  • ファイルを保存します。

XDocument を使用する

XDocument を構築するには、XElement オブジェクトを構築する場合と同様に関数型構築を使用します。

次の例は、XDocument オブジェクトおよび関連する格納されるオブジェクトを作成しています。

XDocument d = new XDocument(
    new XComment("This is a comment."),
    new XProcessingInstruction("xml-stylesheet",
        "href='mystyle.css' title='Compact' type='text/css'"),
    new XElement("Pubs",
        new XElement("Book",
            new XElement("Title", "Artifacts of Roman Civilization"),
            new XElement("Author", "Moreno, Jordao")
        ),
        new XElement("Book",
            new XElement("Title", "Midieval Tools and Implements"),
            new XElement("Author", "Gazit, Inbar")
        )
    ),
    new XComment("This is another comment.")
);
d.Declaration = new XDeclaration("1.0", "utf-8", "true");
Console.WriteLine(d);

d.Save("test.xml");
Dim doc As XDocument = <?xml version="1.0" encoding="utf-8"?>
                       <!--This is a comment.-->
                       <?xml-stylesheet href='mystyle.css' title='Compact' type='text/css'?>
                       <Pubs>
                           <Book>
                               <Title>Artifacts of Roman Civilization</Title>
                               <Author>Moreno, Jordao</Author>
                           </Book>
                           <Book>
                               <Title>Midieval Tools and Implements</Title>
                               <Author>Gazit, Inbar</Author>
                           </Book>
                       </Pubs>
                       <!--This is another comment.-->
doc.Save("test.xml")

この例では、test.xml に次の出力が生成されます。

<?xml version="1.0" encoding="utf-8"?>
<!--This is a comment.-->
<?xml-stylesheet href='mystyle.css' title='Compact' type='text/css'?>
<Pubs>
  <Book>
    <Title>Artifacts of Roman Civilization</Title>
    <Author>Moreno, Jordao</Author>
  </Book>
  <Book>
    <Title>Midieval Tools and Implements</Title>
    <Author>Gazit, Inbar</Author>
  </Book>
</Pubs>
<!--This is another comment.-->

関連項目