Validación utilizando una DTD con XmlReader
La validación de la definición de tipo de documento (DTD) se implementa mediante las restricciones de validez definidas en la recomendación de Extensible Markup Language (XML) 1.0 del W3C (World Wide Web Consortium). Las DTD utilizan una gramática formal para describir la estructura y la sintaxis de documentos conformes a la especificación XML; especifican el contenido y los valores permitidos para el documento XML.
Para llevar a cabo una validación con una DTD, XmlReader utiliza la DTD definida en la declaración DOCTYPE de un documento XML. La declaración DOCTYPE puede apuntar a una DTD alineada o hacer referencia a un archivo DTD externo.
Establezca la propiedad XmlReaderSettings.DtdProcessing en DtdProcessing.Parse..
Establezca la propiedad XmlReaderSettings.ValidationType en ValidationType.DTD.
Si la DTD es un archivo externo almacenado en un recurso de red que requiere autenticación, pase un objeto XmlResolver con las credenciales necesarias al método Create.
Ejemplo
En el siguiente ejemplo se valida un archivo XML utilizando un archivo DTD.
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.DtdProcessing = DtdProcessing.Parse
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.DtdProcessing = DtdProcessing.Parse;
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->DtdProcessing = DtdProcessing::Parse;
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;
}
Entrada
En el ejemplo se utiliza como entrada el archivo itemDTD.xml.
<!--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>
Vea también
Conceptos
Leer fragmentos de XML con XmlReader