從 XML 載入 DataSet 結構描述資訊
DataSet 的結構描述 (它的資料表、資料行、關聯和條件約束) 可以利用程式設計方式予以定義、由 DataAdapter 的 Fill 或 FillSchema 方法予以建立,或從 XML 文件中予以載入。若要從 XML 文件載入 DataSet 結構描述資訊,您可以使用 DataSet 的 ReadXmlSchema 或 InferXmlSchema 方法。ReadXmlSchema 可讓您從包含 XML 結構描述定義語言 (XSD) 結構描述的文件,或具有內嵌 XML 結構描述的 XML 文件,來載入或推斷 DataSet 結構描述資訊。InferXmlSchema 可讓您從 XML 文件推斷結構描述,並同時忽略您指定的特定 XML 命名空間。
ReadXmlSchema
若要從 XML 文件載入 DataSet 的結構描述,而不載入任何資料,可以使用 DataSet 的 ReadXmlSchema 方法。ReadXmlSchema 建立使用 XML 結構描述定義語言 (XSD) 結構描述所定義的 DataSet 結構描述。
ReadXmlSchema 方法採用檔案名稱、資料流或包含要載入 XML 文件的 XmlReader 做為單一引數。XML 文件只能包含結構描述或是內嵌於包含資料的 XML 項目的結構描述。如需將內嵌結構描述撰寫為 XML 結構描述的詳細資訊,請參閱從 XML 結構描述 (XSD) 產生 DataSet 關聯式結構。
如果傳遞給 ReadXmlSchema 的 XML 文件不包含內嵌結構描述資訊,則 ReadXmlSchema 會從 XML 文件中的項目推斷結構描述。如果 DataSet 已經包含結構描述,則目前結構描述會藉由將新資料行加入現有資料表或加入新資料表 (若尚無資料表) 而擴充。如果加入的資料行已經存在於 DataSet,但其型別與 XML 中的資料行不相容,則會擲回例外狀況。如需 ReadXmlSchema 如何從 XML 文件推斷結構描述的詳細資訊,請參閱從 XML 推斷 DataSet 關聯式結構。
雖然 ReadXmlSchema 只載入或推斷 DataSet 的結構描述,而 DataSet 的 ReadXml 方法會載入或推斷 XML 文件中包含的結構描述和資料。如需詳細資訊,請參閱從 XML 載入 DataSet。
下列程式碼範例顯示如何從 XML 文件或資料流載入 DataSet 結構描述。第一個範例顯示 XML 結構描述檔案名稱被傳遞給 ReadXmlSchema 方法。第二個範例顯示 System.IO.StreamReader。
Dim dataSet As DataSet = New DataSet
dataSet.ReadXmlSchema("schema.xsd")
DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema("schema.xsd");
Dim xmlStream As System.IO.StreamReader = New System.IO.StreamReader ("schema.xsd");
Dim dataSet As DataSet = New DataSet
dataSet.ReadXmlSchema(xmlStream)
xmlStream.Close()
System.IO.StreamReader xmlStream = new System.IO.StreamReader("schema.xsd");
DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema(xmlStream);
xmlStream.Close();
InferXmlSchema
您也可以指示 DataSet 使用 DataSet 的 InferXmlSchema 方法從 XML 文件推斷其結構描述。InferXmlSchema 的功能等於 ReadXml 加上 InferSchema 的XmlReadMode (載入資料和推斷結構描述),而在被讀取的文件不包含內嵌結構描述時,也等於 ReadXmlSchema;不過 InferXmlSchema 還提供其他功能,可讓您指定在推斷結構描述時要忽略的特定 XML 命名空間。InferXmlSchema 有兩個必要引數:由檔案名稱、資料流或 XmlReader 指定的 XML 文件位置,以及作業所忽略的 XML 命名空間的字串陣列。
例如,請考量下列 XML:
<NewDataSet xmlns:od="urn:schemas-microsoft-com:officedata">
<Categories>
<CategoryID od:adotype="3">1</CategoryID>
<CategoryName od:maxLength="15" od:adotype="130">Beverages</CategoryName>
<Description od:adotype="203">Soft drinks and teas</Description>
</Categories>
<Products>
<ProductID od:adotype="20">1</ProductID>
<ReorderLevel od:adotype="3">10</ReorderLevel>
<Discontinued od:adotype="11">0</Discontinued>
</Products>
</NewDataSet>
由於為前一個 XML 文件的項目指定的屬性,ReadXmlSchema 方法和 ReadXml 方法 (兩者皆含 InferSchema 的 XmlReadMode) 都會針對文件的每個項目建立資料表:Categories、CategoryID、CategoryName、Description、Products、ProductID、ReorderLevel 和 Discontinued (如需詳細資訊,請參閱從 XML 推斷 DataSet 關聯式結構)。但是,比較適當的結構是只建立 Categories 和 Products,然後在 Categories 資料表中建立 CategoryID、CategoryName 和 Description 資料行,以及在 Products 資料表中建立 ProductID、ReorderLevel 和 Discontinued 資料行。若要確保推斷的結構描述忽略 XML 項目中指定的屬性,請使用 InferXmlSchema 方法,並指定 officedata 要忽略的 XML 命名空間,如下列範例所示。
Dim dataSet As DataSet = New DataSet
dataSet.InferXmlSchema("input_od.xml", New String[] {"urn:schemas-microsoft-com:officedata"})
DataSet dataSet = new DataSet();
dataSet.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");
請參閱
概念
其他資源
在 DataSet 中使用 XML
從 XML 結構描述 (XSD) 產生 DataSet 關聯式結構
從 XML 推斷 DataSet 關聯式結構
使用 ADO.NET 中的 DataSets