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

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

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

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

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

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

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

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

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

XmlDeclaration の書き込み

XmlDocument および XmlDeclarationOuterXml メソッドに加えて、InnerXmlWriteTo、および XmlDocumentSave および WriteContentTo メンバーは XML 宣言を作成します。

XmlDocumentOuterXmlInnerXml プロパティ、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 メソッドでは、WriteStartDocument クラスの XmlWriter メソッドを使用して XML 宣言が書き出されます。 そのため、WriteStartDocument メソッドをオーバーライドすると、ドキュメントの先頭部分の出力方法が変わります。

XmlDeclarationOuterXml、および WriteToInnerXml メンバーについて、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 プロパティを使用します。

関連項目