Validierung mithilfe einer DTD mit "XmlReader"
Aktualisiert: November 2007
DTD-Validierungen (Document Type Definition) werden unter Verwendung von Gültigkeitsbeschränkungen implementiert, die in der W3C-Empfehlung zu Extensible Markup Language (XML) 1.0 definiert sind. DTDs verwenden eine formale Grammatik zur Beschreibung der Struktur und Syntax kompatibler XML-Dokumente und legen fest, welche Inhalte und Werte für das XML-Dokument zulässig sind.
Zur Ausführung einer DTD-Validierung verwendet der XmlReader die in der DOCTYPE-Deklaration eines XML-Dokuments definierte DTD. Die DOCTYPE-Deklaration kann entweder auf eine Inline-DTD oder auf eine externe DTD-Datei verweisen.
Legen Sie die XmlReaderSettings.ProhibitDtd-Eigenschaft auf false fest.
Legen Sie die XmlReaderSettings.ValidationType-Eigenschaft auf ValidationType.DTD fest.
Wenn die DTD eine externe Datei ist, die auf einer eine Authentifizierung erfordernde Netzwerkressource gespeichert ist, übergeben Sie ein XmlResolver-Objekt mit den notwendigen Anmeldeinformationen an die Create-Methode.
Beispiel
Im folgenden Beispiel wird eine XML-Datei mithilfe einer DTD-Datei validiert.
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO
public class Sample
public shared sub Main()
' Set the validation settings.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.ProhibitDtd = false
settings.ValidationType = ValidationType.DTD
AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("itemDTD.xml", settings)
' Parse the file.
while reader.Read()
end while
end sub
' Display any validation errors.
private shared sub ValidationCallBack(sender as object, e as ValidationEventArgs)
Console.WriteLine("Validation Error: {0}", e.Message)
end sub
end class
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;
public class Sample {
public static void Main() {
// Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
settings.ValidationType = ValidationType.DTD;
settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("itemDTD.xml", settings);
// Parse the file.
while (reader.Read());
}
// Display any validation errors.
private static void ValidationCallBack(object sender, ValidationEventArgs e) {
Console.WriteLine("Validation Error: {0}", e.Message);
}
}
#using <System.Xml.dll>
using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;
using namespace System::IO;
// Display any validation errors.
static void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ e )
{
Console::WriteLine( L"Validation Error: {0}", e->Message );
}
int main()
{
// Set the validation settings.
XmlReaderSettings^ settings = gcnew XmlReaderSettings;
settings->ProhibitDtd = false;
settings->ValidationType = ValidationType::DTD;
settings->ValidationEventHandler += gcnew ValidationEventHandler( ValidationCallBack );
// Create the XmlReader object.
XmlReader^ reader = XmlReader::Create( L"itemDTD.xml", settings );
// Parse the file.
while ( reader->Read() )
;
return 1;
}
Eingabe
In diesem Beispiel wird die Datei itemDTD.xml als Eingabe verwendet.
<!--XML file using a DTD-->
<!DOCTYPE store [
<!ELEMENT store (item)*>
<!ELEMENT item (name,dept,price)>
<!ATTLIST item type CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>]>
<store>
<item type="supplies" ISBN="2-3631-4">
<name>paint</name>
<price>16.95</price>
</item>
</store>
Siehe auch
Konzepte
Lesen von XML mit dem "XmlReader"