ドキュメントの保存と書き込み
XmlDocument を読み込んで保存した場合、保存されたドキュメントは、元のドキュメントとは次のように異なる可能性があります。
PreserveWhitespace メソッドを呼び出す前に
true
プロパティが Save に設定されている場合は、ドキュメント内の空白が出力でも保持されますが、false
に設定されている場合は、XmlDocument が出力を自動的にインデントします。属性間のすべての空白は 1 つの空白文字になります。
要素間の空白が変更されます。 有意の空白は保持され、意味のない空白は保持されません。 しかしながら、ドキュメントの保存時には、出力が読みやすくなるように、既定で XmlTextWriter のインデント モードが使用されます。
属性値を囲む引用符は、既定で二重引用符に変更されます。 QuoteChar の XmlTextWriter プロパティを使用すると、引用符を二重引用符または一重引用符のいずれかに設定できます。
既定では、
{
のような数値エンティティは展開されます。入力ドキュメントのバイト順マークは保持されません。 別のエンコーディングを指定する XML 宣言を明示的に作成しない限り、UCS-2 は UTF-8 として保存されます。
XmlDocument をファイルまたはストリームに書き出す場合、書き出される出力はドキュメントのコンテンツと同じになります。 つまり、XmlDeclaration が書き出されるのは、ドキュメントに が 1 つ含まれていて、ドキュメントの出力時に使われるエンコーディングが宣言ノードで指定されたエンコーディングと同じ場合だけです。
XmlDeclaration の書き込み
XmlDocument および XmlDeclaration の OuterXml メソッドに加えて、InnerXml、WriteTo、および XmlDocument の Save および WriteContentTo メンバーは XML 宣言を作成します。
XmlDocument、OuterXml の InnerXml プロパティ、Save、WriteTo メソッド、および 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 メソッドをオーバーライドすると、ドキュメントの先頭部分の出力方法が変わります。
XmlDeclaration、OuterXml、および WriteTo の InnerXml メンバーについて、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 プロパティを使用します。
関連項目
.NET