次の方法で共有


ドキュメントの保存と書き込み

更新 : November 2007

XmlDocument を読み込んで保存した場合、保存されたドキュメントは、元のドキュメントとは次のように異なる可能性があります。

  • Save メソッドを呼び出す前に PreserveWhitespace プロパティが true に設定されている場合は、ドキュメント内の空白が出力でも保持されますが、false に設定されている場合は、XmlDocument が出力を自動的にインデントします。

  • 属性間のすべての空白は 1 つの空白文字になります。

  • 要素間の空白が変更されます。有意の空白は保持され、意味のない空白は保持されません。しかし、ドキュメントの保存時には、出力が読みやすくなるように、既定で XmlTextWriter のインデント モードが使用されます。

  • 属性値を囲む引用符は、既定で二重引用符に変更されます。XmlTextWriterQuoteChar プロパティを使用すると、引用符を二重引用符または一重引用符のいずれかに設定できます。

  • 既定では、{ のような数値エンティティは展開されます。

  • 入力ドキュメントのバイト順マークは保持されません。別のエンコーディングを指定する XML 宣言を明示的に作成しない限り、UCS-2 は UTF-8 として保存されます。

  • XmlDocument をファイルまたはストリームに書き出す場合、書き出される出力はドキュメントのコンテンツと同じになります。つまり、XmlDeclaration が書き出されるのは、ドキュメントに XmlDeclaration が 1 つ含まれていて、ドキュメントの出力時に使われるエンコーディングが宣言ノードで指定されたエンコーディングと同じ場合だけです。

XmlDeclaration の書き込み

[Overload:System.Xml.XmlDocument.Save および M:System.Xml.XmlDocument.WriteContentTo(System.Xml.XmlWriter) の T:System.Xml.XmlDocument メソッドに加えて、P:System.Xml.XmlNode.OuterXml、P:System.Xml.XmlNode.InnerXml、および M:System.Xml.XmlNode.WriteTo(System.Xml.XmlWriter) の T:System.Xml.XmlDocument] および XmlDeclaration メンバは XML 宣言を作成します。

OuterXmlInnerXmlXmlDocument プロパティ、SaveWriteTo メソッド、および WriteContentTo メソッドについて、XML 宣言に書き出されるエンコーディングは XmlDeclaration ノードから取り出されます。XmlDeclaration ノードが存在しない場合、XmlDeclaration は書き出されません。XmlDeclaration ノードにエンコーディングが含まれていない場合、エンコーディングは XML 宣言に書き出されません。

XmlDocument.Save および XmlDocument.Save メソッドは、常に XmlDeclaration を書き出します。これらのメソッドは、書き込みを行っているライタからエンコーディングを取得します。つまり、ライタのエンコーディングの値によって、ドキュメントと XmlDeclaration オブジェクトのエンコーディングがオーバーライドされます。たとえば、次のコードでは、出力ファイル out.xml の XML 宣言にはエンコーディングは書き込まれません。

Dim doc As New XmlDocument()
Dim tw As XmlTextWriter = New XmlTextWriter("out.xml", Nothing)
doc.Load("text.xml")
doc.Save(tw)
XmlDocument doc = new XmlDocument();
XmlTextWriter tw = new XmlTextWriter("out.xml", null);
doc.Load("text.xml");
doc.Save(tw);

Save メソッドでは、XmlWriter クラスの WriteStartDocument メソッドを使用して XML 宣言が書き出されます。そのため、WriteStartDocument メソッドをオーバーライドすると、ドキュメントの先頭部分の出力方法が変わります。

OuterXmlWriteTo、および InnerXmlXmlDeclaration メンバについて、Encoding プロパティが設定されていないと、エンコーディングは書き出されません。それ以外の場合は、Encoding プロパティのエンコーディングと同じエンコーディングが XML 宣言に書き出されます。

OuterXml プロパティを使用したドキュメント内容の書き込み

OuterXml プロパティは、W3C XML ドキュメント オブジェクト モデル (DOM) 標準に対するマイクロソフトの拡張機能です。OuterXml プロパティは、XML ドキュメント全体のマークアップ、または 1 つのノードとその子ノードのマークアップだけを取得するために使用されます。OuterXml は指定されたノードとその子ノードを表すマークアップを返します。

ドキュメント全体を文字列として保存するコード サンプルを次に示します。

Dim mydoc As New XmlDocument()
' Perform application needs here, like mydoc.Load("myfile");
' Now save the entire document to a string variable called "xml".
Dim xml As String = mydoc.OuterXml
XmlDocument mydoc = new XmlDocument();
// Perform application needs here, like mydoc.Load("myfile");
// Now save the entire document to a string variable called "xml".
string xml = mydoc.OuterXml;

ドキュメント要素だけを保存するコード サンプルを次に示します。

' For the content of the Document Element only.
Dim xml As String = mydoc.DocumentElement.OuterXml
// For the content of the Document Element only.
string xml = mydoc.DocumentElement.OuterXml;

一方、子ノードの内容が必要な場合は、InnerText プロパティを使用します。

参照

概念

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