VB.Net Tutorial/XML/XML Schema

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

Create XML Schema

Imports System.IO
Imports System.Xml
Imports System.Xml.Schema

public class Test
   public Shared Sub Main
        " Create the schema. This object acts as the root node.
        Dim XS As New XmlSchema()
        " Define a personal reference type.
        Dim Personal As New XmlSchemaElement()
        Personal.Name = "Personal"
        Personal.SchemaTypeName = New XmlQualifiedName("boolean", "http://www.w3.org/2001/XMLSchema)
        " Define a business reference type.
        Dim Business As New XmlSchemaElement()
        Business.Name = "BusType"
        Dim BusType As New XmlSchemaComplexType()
        Dim BusSeq As New XmlSchemaSequence()
        Dim Position As New XmlSchemaElement()
        Position.Name = "Position"
        Position.MinOccurs = 1
        Position.MaxOccurs = 1
        Position.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema)
        Dim CompanyName As New XmlSchemaElement()
        CompanyName.Name = "CompanyName"
        CompanyName.MinOccurs = 1
        CompanyName.MaxOccurs = 1
        CompanyName.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")
        BusSeq.Items.Add(Position)
        BusSeq.Items.Add(CompanyName)
        BusType.Particle = BusSeq
        Business.SchemaType = BusType
        XS.Items.Add(Personal)
        XS.Items.Add(Business)
        Dim MyAddress As New XmlSchemaElement
        MyAddress.Name = "Addresses"
        Dim MyAddressType As New XmlSchemaComplexType()
        Dim MyAddressSeq As New XmlSchemaSequence()
        Dim Items As New XmlSchemaElement()
        Items.Name = "Item"
        Items.MinOccurs = 1
        Items.MaxOccursString = "unbounded"
        Dim ThisType As New XmlSchemaComplexType()
        Dim ThisSeq As New XmlSchemaSequence()
        Dim FName As New XmlSchemaElement()
        FName.Name = "FirstName"
        FName.MinOccurs = 1
        FName.MaxOccurs = 1
        FName.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")
        Dim LName As New XmlSchemaElement()
        LName.Name = "LastName"
        LName.MinOccurs = 1
        LName.MaxOccurs = 1
        LName.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")
        Dim Address As New XmlSchemaElement()
        Address.Name = "Address"
        Address.MinOccurs = 1
        Address.MaxOccursString = "unbounded"
        Address.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")

        Dim City As New XmlSchemaElement()
        City.Name = "City"
        City.MinOccurs = 1
        City.MaxOccurs = 1
        City.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")
        Dim Region As New XmlSchemaElement()
        Region.Name = "Region"
        Region.MinOccurs = 0
        Region.MaxOccurs = 1
        Region.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")

        Dim PostalCode As New XmlSchemaElement()
        PostalCode.Name = "PostalCode"
        PostalCode.MinOccurs = 0
        PostalCode.MaxOccurs = 1
        PostalCode.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")
        Dim PersOrBus As New XmlSchemaChoice()
        PersOrBus.MinOccurs = 1
        PersOrBus.MaxOccurs = 1
        Dim PersRef As New XmlSchemaElement()
        PersRef.RefName = New XmlQualifiedName("Personal")
        PersOrBus.Items.Add(PersRef)
        Dim BusRef As New XmlSchemaElement()
        BusRef.RefName = New XmlQualifiedName("BusType")
        PersOrBus.Items.Add(BusRef)
        ThisSeq.Items.Add(FName)
        ThisSeq.Items.Add(LName)
        ThisSeq.Items.Add(PersOrBus)
        ThisSeq.Items.Add(Address)
        ThisSeq.Items.Add(City)
        ThisSeq.Items.Add(Region)
        ThisSeq.Items.Add(PostalCode)
        ThisType.Particle = ThisSeq
        Items.SchemaType = ThisType
        MyAddressSeq.Items.Add(Items)
        MyAddressType.Particle = MyAddressSeq
        MyAddress.SchemaType = MyAddressType
        XS.Items.Add(MyAddress)
        Dim Output As New XmlTextWriter("TestSchema.xsd", System.Text.Encoding.UTF8)
        XS.Write(Output)
        Output.Close()
   End Sub
End class

Validating XML documents against Schemas

Imports System.Xml
Imports System.Xml.Schema " contains XmlSchemaSet class

Public Class Tester
   Private Shared schemas As XmlSchemaSet " schemas to validate against
   Private Shared valid As Boolean = True " validation result
    Public Shared Sub Main

      schemas = New XmlSchemaSet() " create the XmlSchemaSet class
      schemas.Add("http://www.deitel.ru/booklist", "book.xsd")
      Dim settings As New XmlReaderSettings()
      settings.ValidationType = ValidationType.Schema
      settings.Schemas = schemas
      AddHandler settings.ValidationEventHandler, AddressOf ValidationError
      Dim reader As XmlReader = XmlReader.Create("YourFile.xml", settings)
      While reader.Read()
      End While
      Console.WriteLine(valid)
      valid = True " reset variable
      reader.Close() " close reader stream 
    End Sub
   Private Shared Sub ValidationError(ByVal sender As Object, _
      ByVal arguments As ValidationEventArgs)
      Console.WriteLine(arguments.Message)
      valid = False
   End Sub 
End Class