VB.Net/XML/XML DataSet

Материал из VB Эксперт
Перейти к: навигация, поиск

Load xml document to DataSet

<source lang="vbnet"> Imports System Imports System.Xml Imports System.Xml.Schema Imports System.IO Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Collections Imports System.Data Imports System.Windows.Forms

Public Class MainClass

   Shared Sub Main()
       Dim DSStudentClasses As New DataSet()
       Dim tmpNode As XmlNode
       " Load the schema into the DataSet
       DSStudentClasses.ReadXmlSchema("StudentClasses.xsd")
       " Load the DataSet into the data document
       Dim XDocStudents As New XmlDataDocument(DSStudentClasses)
       " Load the data into the data document
       XDocStudents.Load("Students.xml")
       Console.WriteLine("Students in DataSet:")
       Dim Row As DataRow
       For Each Row In DSStudentClasses.Tables("Student").Rows
           Console.WriteLine("{0}:{1}", Row("Name"), Row("GPA"))
           tmpNode = XDocStudents.GetElementFromRow(Row)
           Console.WriteLine( _
                 "   Locker Combination (from XML, not DataSet): {0}", _
                 tmpNode.SelectSingleNode("LockerCombination").InnerText)
           Dim Subject As DataRow
           For Each Subject In Row.GetChildRows("StudentClasses")
               Console.WriteLine("   {0}", Subject("Title"))
           Next
       Next
   End Sub

End Class "student.xml "<?xml version="1.0" encoding="utf-8" ?> "<Students> " <Student ID="1"> " <Name>Joe Wang</Name> " <Age>30</Age> " <GPA>2.95</GPA> " <LockerCombination>10-12-35</LockerCombination> " <Class Title="Biology" Room="100" /> " <Class Title="English Lit" Room="101" /> " </Student> "</Students> "student.xsd "<?xml version="1.0" standalone="yes"?> "<xs:schema id="Students" xmlns="" " xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> " <xs:element name="Students" msdata:IsDataSet="true"> " <xs:complexType> " <xs:choice maxOccurs="unbounded"> " <xs:element name="Student"> " <xs:complexType> " <xs:sequence> " <xs:element name="Name" type="xs:string" " minOccurs="0" msdata:Ordinal="0" /> " <xs:element name="GPA" type="xs:float" " minOccurs="0" msdata:Ordinal="2" /> " <xs:element name="Class" " minOccurs="0" maxOccurs="unbounded"> " <xs:complexType> " <xs:attribute name="Title" type="xs:string" /> " <xs:attribute name="Room" type="xs:string" /> " <xs:attribute name="StudentID" type="xs:int" " use="prohibited" /> " </xs:complexType> " </xs:element> " </xs:sequence> " <xs:attribute name="ID" type="xs:int" /> " </xs:complexType> " </xs:element> " </xs:choice> " </xs:complexType> " <xs:unique name="StudentID" msdata:PrimaryKey="true"> " <xs:selector xpath=".//Student" /> " <xs:field xpath="@ID" /> " </xs:unique> " <xs:keyref name="StudentClasses" refer="StudentID" " msdata:IsNested="true"> " <xs:selector xpath=".//Class" /> " <xs:field xpath="@StudentID" /> " </xs:keyref> " </xs:element> "</xs:schema>

      </source>


Read XML schema with DataSet and output its structure

<source lang="vbnet"> Imports System Imports System.Xml Imports System.Xml.Schema Imports System.IO Imports System.Collections Imports System.Data

Public Class MainClass

   Shared Sub Main()
       Dim MyDS As New DataSet()
       MyDS.ReadXmlSchema("book.xdr")
       Console.WriteLine("Book Structure:")
       Dim Table As DataTable
       For Each Table In MyDS.Tables
           Console.WriteLine("Table {0}", Table.TableName)
           Dim Column As DataColumn
           For Each Column In Table.Columns
               Console.WriteLine("  {0}", Column.ColumnName)
           Next
       Next
   End Sub

End Class "book.xdr "<?xml version = "1.0"?> "<Schema xmlns = "urn:schemas-microsoft-com:xml-data"> " <ElementType name = "title" content = "textOnly" " model = "closed" /> " <ElementType name = "book" content = "eltOnly" model = "closed"> " <element type = "title" minOccurs = "1" maxOccurs = "1" /> " </ElementType> " <ElementType name = "books" content = "eltOnly" model = "closed"> " <element type = "book" minOccurs = "0" maxOccurs = "*" /> " </ElementType> "</Schema>


      </source>


Update and insert XML Element with DataSet

<source lang="vbnet"> Imports System Imports System.Xml Imports System.Xml.Schema Imports System.IO Imports System.Collections Imports System.Data Public Class MainClass

   Shared Sub Main()
       Dim MyDS As New DataSet()
       MyDS.ReadXmlSchema("book.xdr")
       MyDS.ReadXml("book.xml")
       MyDS.AcceptChanges()
       Dim NewBook As DataRow = MyDS.Tables("Book").NewRow()
       NewBook("Title") = "This ADO.NET Book"
       MyDS.Tables("Book").Rows.Add(NewBook)
       MyDS.WriteXml("Books_Changes.xml", XmlWriteMode.DiffGram)
       MyDS.AcceptChanges()
       MyDS.WriteXml("Books_New.xml", XmlWriteMode.IgnoreSchema)
   End Sub

End Class "book.xdr "<?xml version = "1.0"?> "<Schema xmlns = "urn:schemas-microsoft-com:xml-data"> " <ElementType name = "title" content = "textOnly" " model = "closed" /> " <ElementType name = "book" content = "eltOnly" model = "closed"> " <element type = "title" minOccurs = "1" maxOccurs = "1" /> " </ElementType> " <ElementType name = "books" content = "eltOnly" model = "closed"> " <element type = "book" minOccurs = "0" maxOccurs = "*" /> " </ElementType> "</Schema>


      </source>