在 ADO.NET 中,您可以撰寫 DataSet 的 XML 表示法,並且可以選擇是否包含其架構。 如果架構資訊與 XML 內嵌在一起,則會使用 XML 架構定義語言 (XSD) 撰寫。 架構包含的 DataSet 數據表定義,以及關聯和條件約束定義。
當DataSet寫入為 XML 數據時,DataSet中的行會以其目前版本寫入。 不過, DataSet 也可以寫入為 DiffGram,以便包含目前和數據列的原始值。
的 DataSet XML 表示可以寫入檔案、數據流、 XmlWriter 或字串。 這些選項可讓您彈性地傳輸 的 DataSetXML 表示法。 如要取得 DataSet 的 XML 字串表示形式,請使用 GetXml 方法,如以下範例所示。
Dim xmlDS As String = custDS.GetXml()
string xmlDS = custDS.GetXml();
GetXml 回傳沒有結構資訊的 DataSet 的 XML 表示。 若要將架構資訊從 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物件的DataSet的 XML 表示時,你很可能會希望每個關係的子列都嵌套於其相關的父元素內。 為了達成此目標,當你將DataRelation加入DataSet時,將DataRelation的Nested屬性設為true。 如需詳細資訊,請參閱 巢狀資料關係。
以下是將 DataSet 的 XML 表示寫入檔案的兩個範例。 第一個範例會將所產生 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 元素、屬性和文字
你可以利用 ColumnMapping 物件的 DataColumn 屬性指定表格欄位如何在 XML 中表示。 下表顯示資料表欄的 ColumnMapping 屬性的不同 MappingType 值以及所得的 XML。
| MappingType 的值 | 說明 |
|---|---|
| 元素 | 這是預設值。 欄位會被寫入為 XML 元素,其中 ColumnName 是元素的名稱,欄位的內容會被寫入為元素的文字。 例如:<ColumnName>Column Contents</ColumnName> |
| 屬性 | 數據行中的 XML 元素會將數據列寫入為 XML 屬性,其中 ColumnName 是屬性的名稱,數據列的內容則寫為屬性的值。 例如:<RowElement ColumnName="Column Contents" /> |
| SimpleContent | 數據列的內容被寫入當前行的 XML 元素中作為文字。 例如:<RowElement>Column Contents</RowElement>請注意,無法將 SimpleContent 設定在有 Element 欄位或巢狀關係的表格欄位上。 |
| 隱藏 | 欄不會寫入 XML 輸出中。 |