Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Możesz użyć elementu XmlSchemaCollection , aby zweryfikować dokument XML względem schematów języka definicji schematu XML (XSD).
XmlSchemaCollection poprawia wydajność dzięki przechowywaniu schematów w kolekcji, więc nie są ładowane do pamięci za każdym razem, gdy następuje walidacja. Jeśli schemat istnieje w kolekcji schematów, schemaLocation
atrybut jest używany do wyszukiwania schematu w kolekcji.
Ważne
Klasa XmlSchemaCollection jest teraz przestarzała i została zastąpiona klasą XmlSchemaSet . Aby uzyskać więcej informacji na temat XmlSchemaSet klasy, zobacz XmlSchemaSet for Schema Compilation (Kompilacja schematu).
W poniższym przykładzie przedstawiono element główny pliku danych.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:bookstore-schema"
elementFormDefault="qualified"
targetNamespace="urn:bookstore-schema">
W tym przykładzie wartość atrybutu targetNamespace
to urn:bookstore-schema
, czyli ta sama przestrzeń nazw, która jest używana podczas dodawania schematu do elementu XmlSchemaCollection.
Poniższy przykładowy kod dodaje schemat XML do elementu XmlSchemaCollection.
Dim xsc As New XmlSchemaCollection()
' XML Schema.
xsc.Add("urn:bookstore-schema", schema)
reader = New XmlTextReader(filename)
vreader = New XmlValidatingReader(reader)
vreader.Schemas.Add(xsc)
XmlSchemaCollection xsc = new XmlSchemaCollection();
// XML Schema.
xsc.Add("urn:bookstore-schema", schema);
reader = new XmlTextReader (filename);
vreader = new XmlValidatingReader (reader);
vreader.Schemas.Add(xsc);
Atrybut targetNamespace
jest zwykle używany, gdy dodajesz właściwość namespaceURI
w metodzie Add dla XmlSchemaCollection. Można określić odwołanie o wartości null przed dodaniem schematu do XmlSchemaCollection. Pusty ciąg ("") powinien być używany dla schematów bez przestrzeni nazw. Element XmlSchemaCollection może mieć tylko jeden schemat bez przestrzeni nazwowej.
Poniższy przykładowy kod dodaje schemat XML HeadCount.xsd do elementu XmlSchemaCollection i waliduje HeadCount.xml.
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
Namespace ValidationSample
Class Sample
Public Shared Sub Main()
Dim tr As New XmlTextReader("HeadCount.xml")
Dim vr As New XmlValidatingReader(tr)
vr.Schemas.Add("xsdHeadCount", "HeadCount.xsd")
vr.ValidationType = ValidationType.Schema
AddHandler vr.ValidationEventHandler, AddressOf ValidationHandler
While vr.Read()
End While
Console.WriteLine("Validation finished")
End Sub
' Main
Public Shared Sub ValidationHandler(sender As Object, args As ValidationEventArgs)
Console.WriteLine("***Validation error")
Console.WriteLine("Severity:{0}", args.Severity)
Console.WriteLine("Message:{0}", args.Message)
End Sub
' ValidationHandler
End Class
' Sample
End Namespace
' ValidationSample
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
namespace ValidationSample
{
class Sample
{
public static void Main()
{
XmlTextReader tr = new XmlTextReader("HeadCount.xml");
XmlValidatingReader vr = new XmlValidatingReader(tr);
vr.Schemas.Add("xsdHeadCount", "HeadCount.xsd");
vr.ValidationType = ValidationType.Schema;
vr.ValidationEventHandler += new ValidationEventHandler (ValidationHandler);
while(vr.Read());
Console.WriteLine("Validation finished");
}
public static void ValidationHandler(object sender, ValidationEventArgs args)
{
Console.WriteLine("***Validation error");
Console.WriteLine("\tSeverity:{0}", args.Severity);
Console.WriteLine("\tMessage :{0}", args.Message);
}
}
}
Poniżej przedstawiono zawartość pliku wejściowego, HeadCount.xml, który ma zostać zweryfikowany.
<!--Load HeadCount.xsd in SchemaCollection for Validation-->
<hc:HeadCount xmlns:hc='xsdHeadCount'>
<Name>Waldo Pepper</Name>
<Name>Red Pepper</Name>
</hc:HeadCount>
Poniżej przedstawiono zawartość pliku schematu XML HeadCount.xsd do zweryfikowania.
<xs:schema xmlns="xsdHeadCount" targetNamespace="xsdHeadCount" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name='HeadCount' type="HEADCOUNT"/>
<xs:complexType name="HEADCOUNT">
<xs:sequence>
<xs:element name='Name' type='xs:string' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='division' type='xs:int' use='optional' default='8'/>
</xs:complexType>
</xs:schema>
Poniższy przykład kodu tworzy obiekt XmlValidatingReader , który przyjmuje element XmlTextReader. Plik wejściowy, sample4.xml, jest weryfikowany względem schematu XML, sample4.xsd.
Dim tr As New XmlTextReader("sample4.xml")
Dim vr As New XmlValidatingReader(tr)
vr.ValidationType = ValidationType.Schema
vr.Schemas.Add("datatypesTest", "sample4.xsd")
AddHandler vr.ValidationEventHandler, AddressOf ValidationCallBack
While vr.Read()
Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name)
End While
XmlTextReader tr = new XmlTextReader("sample4.xml");
XmlValidatingReader vr = new XmlValidatingReader(tr);
vr.ValidationType = ValidationType.Schema;
vr.Schemas.Add("datatypesTest", "sample4.xsd");
vr.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
while(vr.Read()) {
Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name);
}
Poniżej przedstawiono zawartość pliku wejściowego, sample4.xml, który ma zostać zweryfikowany.
<datatypes xmlns="datatypesTest">
<number>
<number_1>123</number_1>
</number>
</datatypes>
Poniżej przedstawiono zawartość pliku schematu XML sample4.xsd do zweryfikowania.
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="datatypesTest"
targetNamespace="datatypesTest"
elementFormDefault="qualified">
<xs:element name = "datatypes">
<xs:complexType>
<xs:all>
<xs:element name="number">
<xs:complexType>
<xs:sequence>
<xs:element name="number_1" type="xs:decimal" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>