Megosztás a következőn keresztül:


Adatkészletséma adatainak betöltése XML-ből

Egy (táblák, oszlopok, kapcsolatok és megkötések) sémája DataSet programozott módon határozható meg, amelyet egy DataAdapterXML-dokumentum Fill vagy FillSchema metódusai hoznak létre. A DataSet sémainformációinak XML-dokumentumból való betöltéséhez használhatja a ReadXmlSchema vagy az Adatkészlet InferXmlSchema metódusát. A ReadXmlSchema lehetővé teszi a DataSet sémainformációinak betöltését vagy következtetését az XML-sémadefiníciós (XSD) sémát tartalmazó dokumentumból vagy egy beágyazott XML-sémával rendelkező XML-dokumentumból. Az InferXmlSchema lehetővé teszi a séma következtetését az XML-dokumentumból, miközben figyelmen kívül hagy bizonyos megadott XML-névtereket.

Feljegyzés

Előfordulhat, hogy az adatkészletek táblázatrendezése nem marad meg, ha webszolgáltatásokkal vagy XML-szerializálással XSD-szerkezetek (például beágyazott kapcsolatok) használatával a memóriában létrehozott adathalmazt továbbítja. Ezért az Adatkészlet címzettje ebben az esetben nem függhet a táblarendezéstől. A táblázatrendezés azonban mindig megmarad, ha az átvitt adathalmaz sémája XSD-fájlokból lett beolvasva ahelyett, hogy a memóriában lett volna létrehozva.

ReadXmlSchema

Ha egy ADATHALMAZ sémáját egy XML-dokumentumból szeretné betölteni adatok betöltése nélkül, használhatja az Adathalmaz ReadXmlSchema metódusát. A ReadXmlSchema XML-sémadefiníciós (XSD) sémával definiált DataSet-sémát hoz létre.

A ReadXmlSchema metódus egyetlen argumentumot használ a betöltendő XML-dokumentumot tartalmazó fájlnévből, streamből vagy XmlReaderből . Az XML-dokumentum csak sémát tartalmazhat, vagy adatokat tartalmazó XML-elemekkel beágyazott sémát is tartalmazhat. A beágyazott sémák XML-sémaként való írásával kapcsolatos részletekért lásd: DataSet Relational Structure from XML Schema (XSD) (DataSet Relational Structure from XML Schema, XSD).

Ha a ReadXmlSchema számára átadott XML-dokumentum nem tartalmaz beágyazott sémainformációt, a ReadXmlSchema az XML-dokumentum elemeiből fogja kikövetkeztetni a sémát. Ha az Adatkészlet már tartalmaz sémát, az aktuális séma új táblák hozzáadásával bővül, ha még nem léteznek. A rendszer nem ad hozzá új oszlopokat a meglévő táblákhoz. Ha egy hozzáadott oszlop már létezik az Adatkészletben , de nem kompatibilis az XML-ben található oszlopmal, a rendszer kivételt jelez. További információ arról, hogy a ReadXmlSchema hogyan következtet egy sémára egy XML-dokumentumból: Adathalmaz relációs struktúrájának következtetése XML-ből.

Bár a ReadXmlSchema csak egy Adathalmaz sémáját tölti be vagy következteti, az Adatkészlet ReadXml metódusa betölti vagy kikövetkezetezteti mind a sémát, mind az XML-dokumentumban található adatokat. További információ: Adathalmaz betöltése XML-ből.

Az alábbi példakód bemutatja, hogyan tölthető be adathalmazséma XML-dokumentumból vagy streamből. Az első példa egy XML-sémafájl nevét mutatja be, amely a ReadXmlSchema metódusnak van átadva. A második példa egy System.IO.StreamReadert mutat be.

Dim dataSet As DataSet = New DataSet  
dataSet.ReadXmlSchema("schema.xsd")  
DataSet dataSet = new DataSet();  
dataSet.ReadXmlSchema("schema.xsd");  
Dim xmlStream As 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

Arra is utasíthatja az Adatkészletet, hogy az adathalmaz InferXmlSchema metódusával következtetsen a sémájára egy XML-dokumentumból. Az InferXmlSchema ugyanúgy működik, mint a ReadXml az InferSchema XmlReadMode-jával (betölti az adatokat és a következtetési sémát), és a ReadXmlSchema is, ha az olvasott dokumentum nem tartalmaz beágyazott sémát. Az InferXmlSchema azonban lehetővé teszi, hogy bizonyos XML-névtereket figyelmen kívül hagyjon a séma következtetésekor. Az InferXmlSchema két kötelező argumentumot vesz fel: az XML-dokumentum helyét egy fájlnév, egy stream vagy egy XmlReader által megadott helyen, valamint egy XML-névterekből álló karakterlánctömböt, amelyet a művelet figyelmen kívül hagy.

Vegyük például a következő XML-t:

<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>  

Az előző XML-dokumentum elemeihez megadott attribútumok miatt a ReadXmlSchema metódus és az InferSchema XmlReadMode-jávalrendelkező ReadXml metódus is táblákat hozna létre a dokumentum minden eleméhez: Kategóriák, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel és Discontinued. (További információ:Adathalmaz relációs szerkezetének következtetése XML-ből.) A megfelelőbb struktúra azonban csak a Kategóriák és termékek táblák létrehozása, majd a Kategóriák tábla CategoryID, CategoryName és Description oszlopainak, valamint a Termékek tábla ProductID, ReorderLevel és Megszüntetett oszlopainak létrehozása. Annak érdekében, hogy a következtetett séma figyelmen kívül hagyja az XML-elemekben megadott attribútumokat, használja az InferXmlSchema metódust, és adja meg az officedata figyelmen kívül hagyandó XML-névterét az alábbi példában látható módon.

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");  

Lásd még