Share via


從 XML 載入 DataSet 結構描述資訊

DataSet 的結構描述 (它的資料表、資料行、關聯和條件約束) 可以利用程式設計方式予以定義、由 DataAdapterFillFillSchema 方法予以建立,或從 XML 文件中予以載入。若要從 XML 文件載入 DataSet 結構描述資訊,您可以使用 DataSetReadXmlSchemaInferXmlSchema 方法。ReadXmlSchema 可讓您從包含 XML 結構描述定義語言 (XSD) 結構描述的文件,或具有內嵌 XML 結構描述的 XML 文件,來載入或推斷 DataSet 結構描述資訊。InferXmlSchema 可讓您從 XML 文件推斷結構描述,並同時忽略您指定的特定 XML 命名空間。

ReadXmlSchema

若要從 XML 文件載入 DataSet 的結構描述,而不載入任何資料,可以使用 DataSetReadXmlSchema 方法。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 的結構描述,而 DataSetReadXml 方法會載入或推斷 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 使用 DataSetInferXmlSchema 方法從 XML 文件推斷其結構描述。InferXmlSchema 的功能等於 ReadXml 加上 InferSchemaXmlReadMode (載入資料和推斷結構描述),而在被讀取的文件不包含內嵌結構描述時,也等於 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 方法 (兩者皆含 InferSchemaXmlReadMode) 都會針對文件的每個項目建立資料表:CategoriesCategoryIDCategoryNameDescriptionProductsProductIDReorderLevelDiscontinued (如需詳細資訊,請參閱從 XML 推斷 DataSet 關聯式結構)。但是,比較適當的結構是只建立 CategoriesProducts,然後在 Categories 資料表中建立 CategoryIDCategoryNameDescription 資料行,以及在 Products 資料表中建立 ProductIDReorderLevelDiscontinued 資料行。若要確保推斷的結構描述忽略 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");

請參閱

概念

從 XML 載入 DataSet

其他資源

在 DataSet 中使用 XML
從 XML 結構描述 (XSD) 產生 DataSet 關聯式結構
從 XML 推斷 DataSet 關聯式結構
使用 ADO.NET 中的 DataSets