Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dengan menggunakan kelas , XmlDocument Anda dapat memvalidasi konten XML yang XmlDocument terkandung dalam objek dengan dua cara. Cara pertama adalah memvalidasi konten XML menggunakan objek validasi XmlReader dan cara kedua adalah menggunakan Validate metode XmlDocument kelas . Anda juga dapat melakukan validasi hanya baca konten XML menggunakan kelas XPathDocument.
Memvalidasi Data XML
Kelas XmlDocument tidak memvalidasi dokumen XML menggunakan validasi skema bahasa definisi skema DTD atau XML (XSD) secara default. Ini hanya memverifikasi bahwa dokumen XML terbentuk dengan baik.
Cara pertama untuk memvalidasi dokumen XML adalah dengan memvalidasi dokumen saat dimuat ke dalam XmlDocument objek menggunakan objek validasi XmlReader . Cara kedua adalah memvalidasi dokumen XML yang sebelumnya tidak terdefinisi tipe menggunakan metode Validate dari kelas XmlDocument. Dalam kedua kasus, perubahan pada dokumen XML yang divalidasi dapat divalidasi ulang menggunakan Validate metode XmlDocument kelas .
Memvalidasi Dokumen saat Dimuat
Objek validasi XmlReader dibuat dengan meneruskan XmlReaderSettings objek ke Create metode XmlReader kelas yang mengambil XmlReaderSettings objek sebagai parameter. Objek XmlReaderSettings yang diteruskan sebagai parameter memiliki properti ValidationType yang diatur ke Schema dan Skema XML untuk dokumen XML yang terkandung dalam objek XmlDocument ditambahkan ke properti Schemas-nya. Objek validasi XmlReader kemudian digunakan untuk membuat XmlDocument objek.
Contoh berikut memvalidasi contosoBooks.xml file saat dimuat ke dalam XmlDocument objek dengan membuat XmlDocument objek menggunakan objek validasi XmlReader . Karena dokumen XML valid sesuai dengan skemanya, tidak ada kesalahan validasi skema atau peringatan yang dihasilkan.
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.XPath
Class ValidatingReaderExample
Shared Sub Main(ByVal args() As String)
Try
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml", settings)
Dim document As XmlDocument = New XmlDocument()
document.Load(reader)
Dim navigator As XPathNavigator = document.CreateNavigator()
Catch e As Exception
Console.WriteLine("ValidatingReaderExample.Exception: {0}", e.Message)
End Try
End Sub
Shared Sub SchemaValidationHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine("Schema Validation Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine("Schema Validation Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
End Class
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
class ValidatingReaderExample
{
static void Main(string[] args)
{
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
XPathNavigator navigator = document.CreateNavigator();
}
catch (Exception e)
{
Console.WriteLine("ValidatingReaderExample.Exception: {0}", e.Message);
}
}
static void SchemaValidationHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Schema Validation Error: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Schema Validation Warning: {0}", e.Message);
break;
}
}
}
Contoh mengambil contosoBooks.xml file sebagai input.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Contohnya juga mengambil contosoBooks.xsd sebagai input.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Dalam contoh di atas, XmlSchemaValidationException akan dilemparkan ketika Load dipanggil jika ada atribut atau jenis elemen yang tidak cocok dengan jenis yang sesuai yang ditentukan dalam skema validasi. ValidationEventHandler diatur pada XmlReader yang memvalidasi, ValidationEventHandler akan dipanggil setiap kali ditemukan jenis yang tidak valid.
XmlSchemaException Akan dilemparkan ketika atribut atau elemen dengan TypedValue diatur ke invalid diakses oleh XPathNavigator.
Properti Validity dapat digunakan untuk menentukan apakah atribut atau elemen individual valid atau tidak saat mengakses atribut atau elemen dengan XPathNavigator.
Nota
Saat dokumen XML dimuat ke dalam XmlDocument objek dengan skema terkait yang menentukan nilai default, XmlDocument objek memperlakukan default ini seolah-olah muncul di dokumen XML. Ini berarti bahwa properti IsEmptyElement selalu mengembalikan false untuk elemen yang diatur secara default dari skema, bahkan jika dalam dokumen XML ditulis sebagai elemen yang kosong.
Memvalidasi Dokumen menggunakan Metode Validasi
Metode Validate dari kelas XmlDocument memvalidasi dokumen XML yang terkandung dalam objek XmlDocument terhadap skema yang ditentukan oleh properti XmlDocument dalam objek Schemas dan melakukan augmentasi infoset. Hasilnya adalah dokumen XML yang sebelumnya tidak bertipe dalam objek XmlDocument diganti dengan dokumen yang bertipe.
Objek XmlDocument melaporkan kesalahan validasi skema dan peringatan dengan menggunakan delegasi ValidationEventHandler yang diteruskan sebagai parameter ke metode Validate.
Contoh berikut memvalidasi file contosoBooks.xml yang terkandung dalam objek XmlDocument terhadap skema contosoBooks.xsd dalam properti objek XmlDocumentSchemas.
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.XPath
Class ValidateExample
Shared Sub Main(ByVal args() As String)
Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
document.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
Dim validation As ValidationEventHandler = New ValidationEventHandler(AddressOf SchemaValidationHandler)
document.Validate(validation)
End Sub
Shared Sub SchemaValidationHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine("Schema Validation Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine("Schema Validation Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
End Class
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
class ValidateExample
{
static void Main(string[] args)
{
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();
document.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
ValidationEventHandler validation = new ValidationEventHandler(SchemaValidationHandler);
document.Validate(validation);
}
static void SchemaValidationHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Schema Validation Error: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Schema Validation Warning: {0}", e.Message);
break;
}
}
}
Contoh mengambil contosoBooks.xml file sebagai input.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Contohnya juga mengambil contosoBooks.xsd sebagai input.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Memvalidasi Modifikasi
Setelah modifikasi dilakukan pada dokumen XML, Anda dapat memvalidasi modifikasi terhadap skema untuk dokumen XML menggunakan Validate metode XmlDocument kelas .
Contoh berikut memvalidasi contosoBooks.xml file saat dimuat ke dalam XmlDocument objek dengan membuat XmlDocument objek menggunakan objek validasi XmlReader . Dokumen XML berhasil divalidasi saat dimuat tanpa menghasilkan kesalahan validasi atau peringatan skema apa pun. Contoh kemudian membuat dua modifikasi pada dokumen XML yang tidak valid sesuai dengan contosoBooks.xsd skema. Modifikasi pertama menyisipkan elemen anak yang tidak valid yang mengakibatkan kesalahan validasi skema, dan modifikasi kedua menetapkan nilai node yang diketik ke nilai yang tidak valid sesuai dengan jenis simpul yang menghasilkan pengecualian.
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.XPath
Class ValidatingReaderExample
Shared Sub Main(ByVal args() As String)
Try
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml", settings)
Dim document As XmlDocument = New XmlDocument()
document.Load(reader)
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim validation As ValidationEventHandler = New ValidationEventHandler(AddressOf SchemaValidationHandler)
navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.MoveToChild("author", "http://www.contoso.com/books")
navigator.AppendChild("<title>Book Title</title>")
document.Validate(validation)
navigator.MoveToParent()
navigator.MoveToChild("price", "http://www.contoso.com/books")
navigator.SetTypedValue(DateTime.Now)
Catch e As Exception
Console.WriteLine("ValidatingReaderExample.Exception: {0}", e.Message)
End Try
End Sub
Shared Sub SchemaValidationHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine("Schema Validation Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine("Schema Validation Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
End Class
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
class ValidatingReaderExample
{
static void Main(string[] args)
{
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
XPathNavigator navigator = document.CreateNavigator();
ValidationEventHandler validation = new ValidationEventHandler(SchemaValidationHandler);
navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.MoveToChild("author", "http://www.contoso.com/books");
navigator.AppendChild("<title>Book Title</title>");
document.Validate(validation);
navigator.MoveToParent();
navigator.MoveToChild("price", "http://www.contoso.com/books");
navigator.SetTypedValue(DateTime.Now);
}
catch (Exception e)
{
Console.WriteLine("ValidatingReaderExample.Exception: {0}", e.Message);
}
}
static void SchemaValidationHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Schema Validation Error: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Schema Validation Warning: {0}", e.Message);
break;
}
}
}
Contoh mengambil contosoBooks.xml file sebagai input.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Contohnya juga mengambil contosoBooks.xsd sebagai input.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Dalam contoh di atas, dua modifikasi dilakukan pada dokumen XML yang terkandung dalam XmlDocument objek . Saat dokumen XML dimuat, kesalahan validasi skema apa pun yang ditemui akan ditangani oleh metode penanganan aktivitas validasi dan ditulis ke konsol.
Dalam contoh ini, kesalahan validasi dimasukkan setelah dokumen XML dimuat dan ditemukan menggunakan metode Validate dari kelas XmlDocument.
Modifikasi yang dilakukan menggunakan SetTypedValue metode XPathNavigator kelas menghasilkan InvalidCastException karena nilai baru tidak valid sesuai dengan jenis skema simpul.
Untuk informasi selengkapnya tentang memodifikasi nilai menggunakan SetTypedValue metode , lihat topik Ubah Data XML menggunakan XPathNavigator .
Validasi Read-Only
Kelas XPathDocument adalah representasi baca-saja dalam memori dari dokumen XML. Kelas XPathDocument dan kelas XmlDocument membuat objek XPathNavigator dalam menavigasi dan mengedit dokumen XML. Karena XPathDocument bersifat kelas baca-saja, objek XPathNavigator yang dikembalikan dari objek XPathDocument tidak dapat mengedit dokumen XML yang terkandung dalam objek XPathDocument.
Dalam kasus validasi, Anda dapat membuat XPathDocument objek seperti Anda membuat XmlDocument objek menggunakan objek validasi XmlReader seperti yang dijelaskan sebelumnya dalam topik ini. Objek XPathDocument memvalidasi dokumen XML saat dimuat, tetapi karena Anda tidak dapat mengedit data XML dalam XPathDocument objek, Anda tidak dapat memvalidasi ulang dokumen XML.
Untuk informasi selengkapnya tentang objek baca-saja dan dapat XPathNavigator diedit, lihat topik Membaca Data XML menggunakan XPathDocument dan XmlDocument .
Lihat juga
- XmlDocument
- XPathDocument
- XPathNavigator
- Memproses Data XML Menggunakan Model Data XPath
- Membaca Data XML menggunakan XPathDocument dan XmlDocument
- Memilih, Mengevaluasi, dan Mencocokkan Data XML menggunakan XPathNavigator
- Mengakses Data XML menggunakan XPathNavigator
- Mengedit Data XML menggunakan XPathNavigator