將資料集內容當做 XML 資料寫入

在 ADO.NET 中,您可以寫入使用 XML 形式的 DataSet,具有或不具有其結構描述皆可。 如果結構描述資訊是以 XML 內嵌的,它就會以 XML 結構描述定義語言 (XSD) 寫入。 結構描述包含 DataSet 的資料表定義,以及關聯性和條件約束定義。

DataSet 寫為 XML 資料時,DataSet 中的資料列會以其目前版本寫入。 不過,DataSet 也可寫入為 DiffGram,如此便能夠包含資料列的目前和原始值。

XML 形式的 DataSet 可寫入檔案、串流、XmlWriter 或字串中。 這些選擇在您要傳輸 XML 形式的 DataSet 時,可提供相當大的彈性。 若要以字串方式取得 XML 形式的 DataSet,請使用下列範例中所示的 GetXml 方法。

Dim xmlDS As String = custDS.GetXml()  
string xmlDS = custDS.GetXml();  

GetXml 會傳回 XML 形式的 DataSet,其中不包含結構描述資訊。 若要將 DataSet 的結構描述資訊 (做為 XML 結構描述) 寫入字串中,請使用 GetXmlSchema

若要將 DataSet 寫入檔案、串流或 XmlWriter 中,請使用 WriteXml 方法。 您傳遞給 WriteXml 的第一個參數是 XML 輸出的目的端。 例如,傳遞包含檔案名稱、System.IO.TextWriter 物件等的字串。 您可以傳遞第二個選擇性的 XmlWriteMode 參數,以指定 XML 輸出的寫入方式。

下列表格顯示 XmlWriteMode 的選項。

XmlWriteMode 選項 描述
IgnoreSchema DataSet 目前的內容寫入為 XML 資料,其中不包含 XML 結構描述。 這是預設值。
WriteSchema DataSet 目前的內容寫入為 XML 資料,它會將關聯式結構做為內嵌 XML 結構描述。
DiffGram 將整個 DataSet 寫入為 DiffGram (包括原始值和目前值)。 如需詳細資訊,請參閱 DiffGrams

寫入含有 DataRelation 物件之 XML 形式的 DataSet 時,您通常應該會想讓產生的 XML 能夠將每個關聯的子資料列巢狀化至其相關父項目內。 為達此目的,請在將 DataRelation 加入 DataSet 時,將 DataRelation 的 Nested 屬性設為 true。 如需詳細資訊,請參閱巢狀 DataRelations

下列兩個範例說明如何將 XML 形式的 DataSet 寫入檔案中。 第一個範例會將產生的 XML 的檔案名稱以字串傳遞給 WriteXml。 第二個範例則會傳遞 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 項目、屬性和文字

您可以使用 DataColumn 物件的 ColumnMapping 屬性,指定將如何以 XML 表示資料表的資料行。 下列表格說明資料表資料行的 ColumnMapping 屬性所具有的不同 MappingType 值,以及所產生的 XML。

MappingType 值 描述
Element 這是預設值。 資料行會寫為 XML 項目,其中 ColumnName 為項目名稱,並且資料行內容會寫為項目文字。 例如:

<ColumnName>Column Contents</ColumnName>
屬性 資料行會寫為目前資料行 XML 項目的 XML 屬性,其中 ColumnName 是屬性名稱,且資料行內容會寫為屬性值。 例如:

<RowElement ColumnName="Column Contents" />
SimpleContent 資料行內容會寫為目前資料行 XML 項目中的文字。 例如:

<RowElement>Column Contents</RowElement>

請注意,如果資料表具有 Element 資料行或巢狀化關聯,則不能將這個資料表的資料行設定為 SimpleContent
Hidden XML 輸出中不會寫入資料行。

另請參閱