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 にを書き込むには、WriteXml メソッドを使用します。
WriteXmlに渡す最初のパラメーターは、XML 出力の宛先です。 たとえば、ファイル名、 System.IO.TextWriter オブジェクトなどを含む文字列を渡します。
XmlWriteModeの省略可能な 2 番目のパラメーターを渡して、XML 出力の書き込み方法を指定できます。
次の表に、 XmlWriteMode のオプションを示します。
| XmlWriteMode オプション | 説明 |
|---|---|
| IgnoreSchema | XML スキーマを使用せずに、 DataSet の現在の内容を XML データとして書き込みます。 これが既定値です。 |
| WriteSchema | リレーショナル構造をインライン XML スキーマとして使用して、 DataSet の現在の内容を XML データとして書き込みます。 |
| DiffGram | 元の値と現在の値を含め、 DataSet 全体を DiffGram として書き込みます。 詳細については、「 DiffGrams」を参照してください。 |
DataSet を含む DataRelation オブジェクトの XML 表現を記述する場合、ほとんどの場合、結果の XML では、各リレーションシップの子行が関連する親要素内に入れ子にされたいと考えるでしょう。 これを行うには、NestedにDataRelationを追加するときに、trueのDataRelation プロパティをDataSetに設定します。 詳しくは、「DataRelation の入れ子化」をご覧ください。
DataSetの XML 表現をファイルに書き込む方法の 2 つの例を次に示します。 最初の例では、結果の 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 要素、属性、およびテキストへの列のマッピング
ColumnMapping オブジェクトの DataColumn プロパティを使用して、テーブルの列を XML で表す方法を指定できます。 次の表は、テーブル列のMappingType プロパティのさまざまなColumnMapping値と、結果の XML を示しています。
| マッピングタイプの値 | 説明 |
|---|---|
| 要素 | これが既定値です。 列は XML 要素として書き込まれます。ColumnName は要素の名前であり、列の内容は要素のテキストとして書き込まれます。 例えば次が挙げられます。<ColumnName>Column Contents</ColumnName> |
| 属性 | 列は現在の行の XML 要素の XML 属性として書き込まれます。ColumnName は属性の名前であり、列の内容は属性の値として書き込まれます。 例えば次が挙げられます。<RowElement ColumnName="Column Contents" /> |
| SimpleContent | 列の内容は、現在の行の XML 要素にテキストとして書き込まれます。 例えば次が挙げられます。<RowElement>Column Contents</RowElement>SimpleContent列または入れ子になったリレーションシップを持つテーブルの列には、Elementを設定できないことに注意してください。 |
| 隠れた | 列は XML 出力に書き込まれません。 |