DataSet 内容の XML データとしての書き込み
ADO.NET では、DataSet の XML 表現を記述することができます。このとき、 にスキーマが含まれていても、含まれていなくてもかまいません。 XML にインラインで含まれているスキーマ情報は、XML スキーマ定義言語 (XSD) を使用して記述されています。 スキーマには、リレーション定義および制約定義と、DataSet のテーブル定義が含まれています。
DataSet が XML データとして書き込まれると、DataSet の行は現在のバージョンで書き込まれます。 ただし、行の現在の値と元の値の両方を含めるには、DataSet を DiffGram として書き込みます。
DataSet の XML 表現は、ファイル、ストリーム、XmlWriter、または文字列に書き込むことができます。 複数の書き込み先があることから、DataSet の XML 表現の転送方法を柔軟に変更できます。 DataSet の XML 表現を文字列として取得するには、次の例に示すように GetXml メソッドを使用します。
Dim xmlDS As String = custDS.GetXml()
string xmlDS = custDS.GetXml();
GetXml では、スキーマ情報を含まない DataSet の XML 表現が返されます。 DataSet (XML スキーマ) のスキーマ情報を文字列に書き込むには、GetXmlSchema を使用します。
DataSet をファイル、ストリーム、または XmlWriter に書き込むには、WriteXml メソッドを使用します。 WriteXml に渡す 1 番目のパラメーターは、XML の出力先です。 たとえば、ファイル名や System.IO.TextWriter オブジェクトなどが含まれている文字列を渡します。 2 番目のパラメーター XmlWriteMode (省略可能) では、XML 出力の書き込み方法を指定できます。
XmlWriteMode のオプションを次の表に示します。
XmlWriteMode のオプション | 説明 |
---|---|
IgnoreSchema | DataSet の現在の内容を XML スキーマを含まない XML データとして書き込みます。 既定値です。 |
WriteSchema | DataSet の現在の内容を XML データとして書き込みます。このとき、リレーショナル構造がインライン XML スキーマとして書き込まれます。 |
DiffGram | 元の値と現在の値を含め、DataSet 全体を DiffGram として書き込みます。 詳しくは、「DiffGrams」をご覧ください。 |
DataRelation オブジェクトが含まれる DataSet の XML 表現を書き込むときは、多くの場合、この XML 表現で、それぞれの親子のリレーションを持つ子行が関連する親要素内に入れ子になるようにします。 これ行うには、DataRelation を DataSet に追加するときに、DataRelation の Nested プロパティを true に設定します。 詳しくは、「DataRelation の入れ子化」をご覧ください。
DataSet の XML 表現をファイルに書き込む 2 つの例を次に示します。 1 番目の例では、書き込まれる XML のファイル名を文字列として WriteXml に渡します。 2 番目の例では、System.IO.StreamWriter オブジェクトを渡します。
custDS.WriteXml("Customers.xml", XmlWriteMode.WriteSchema)
custDS.WriteXml("Customers.xml", XmlWriteMode.WriteSchema);
Dim xmlSW As System.IO.StreamWriter = New System.IO.StreamWriter("Customers.xml")
custDS.WriteXml(xmlSW, XmlWriteMode.WriteSchema)
xmlSW.Close()
System.IO.StreamWriter xmlSW = new System.IO.StreamWriter("Customers.xml");
custDS.WriteXml(xmlSW, XmlWriteMode.WriteSchema);
xmlSW.Close();
XML 要素、属性、およびテキストへの列の割り当て
テーブルの列を XML 形式で表す方法を指定するには、DataColumn オブジェクトの ColumnMapping プロパティを使用します。 テーブル列の ColumnMapping プロパティに対するさまざまな MappingType の値と、結果の XML を、次の表に示します。
MappingType の値 | 説明 |
---|---|
要素 | 既定値です。 列が XML 要素として書き込まれます。このとき、ColumnName は要素名になり、列の内容は要素のテキストとして書き込まれます。 次に例を示します。<ColumnName>Column Contents</ColumnName> |
属性 | 列が、現在の行の XML 要素の XML 属性として書き込まれます。このとき、ColumnName は属性名になり、列の内容は属性の値として書き込まれます。 次に例を示します。<RowElement ColumnName="Column Contents" /> |
SimpleContent | 列の内容が、現在の行の XML 要素のテキストとして書き込まれます。 次に例を示します。<RowElement>Column Contents</RowElement> Element 列または入れ子になったリレーションのあるテーブルの列に対しては、SimpleContent を設定できないことに注意してください。 |
[非表示] | 列は XML 出力に書き込まれません。 |