VB.Net Tutorial/XML/XML Schema

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

Create XML Schema

<source lang="vbnet">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</source>

Validating XML documents against Schemas

<source lang="vbnet">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</source>