tipos que español define c# .net xml vb.net dtd

c# - que - .NET: Cómo validar el archivo XML con DTD sin declaración DOCTYPE



html 4.01 transitional (3)

¿Podría crear un Xml.XmlDocument con la DTD que desea, luego agregar los datos del archivo XML a la memoria Xml.XmlDocument en la memoria, y luego validar eso?

Tengo un archivo XML sin declaración DOCTYPE que me gustaría validar con una DTD externa al leer.

Dim x_set As Xml.XmlReaderSettings = New Xml.XmlReaderSettings() x_set.XmlResolver = Nothing x_set.CheckCharacters = False x_set.ProhibitDtd = False x = XmlTextReader.Create(sChemin, x_set)

¿Cómo se establece la ruta para esa DTD externa? ¿Cómo se valida?


He utilizado la siguiente función con éxito anteriormente, que debería ser fácil de adaptar. Sin embargo, esto se basa en la creación de un XmlDocument como magnifico mencionado. Esto se puede lograr por:

XmlDocument doc = new XmlDocument(); doc.Load( filename ); doc.InsertBefore( doc.CreateDocumentType( "doc_type_name", null, DtdFilePath, null ), doc.DocumentElement ); /// <summary> /// Class to test a document against DTD /// </summary> /// <param name="doc">XML The document to validate</param> private static bool ValidateDoc( XmlDocument doc ) { bool isXmlValid = true; StringBuilder xmlValMsg = new StringBuilder(); StringWriter sw = new StringWriter(); doc.Save( sw ); doc.Save( TestFilename ); XmlReaderSettings settings = new XmlReaderSettings(); settings.ProhibitDtd = false; settings.ValidationType = ValidationType.DTD; settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings; settings.ValidationEventHandler += new ValidationEventHandler( delegate( object sender, ValidationEventArgs args ) { isXmlValid = false; xmlValMsg.AppendLine( args.Message ); } ); XmlReader validator = XmlReader.Create( new StringReader( sw.ToString() ), settings ); while( validator.Read() ) { } validator.Close(); string message = xmlValMsg.ToString(); return isXmlValid; }


private static bool _isValid = true; static void Main(string[] args) { using (MemoryStream ms = new MemoryStream()) { using (FileStream file = new FileStream("C://MyFolder//Product.dtd", FileMode.Open, FileAccess.Read)) { byte[] bytes = new byte[file.Length]; file.Read(bytes, 0, (int) file.Length); ms.Write(bytes, 0, (int) file.Length); } using (FileStream file = new FileStream("C://MyFolder//Product.xml", FileMode.Open, FileAccess.Read)) { byte[] bytes = new byte[file.Length]; file.Read(bytes, 0, (int) file.Length); ms.Write(bytes, 0, (int) file.Length); } ms.Position = 0; var settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Parse; settings.ValidationType = ValidationType.DTD; settings.ValidationEventHandler += new ValidationEventHandler(OnValidationEvent); var reader = XmlReader.Create(ms, settings); // Parse the file. while (reader.Read()) ; } // Check whether the document is valid or invalid. if (_isValid) Console.WriteLine("Document is valid"); else Console.WriteLine("Document is invalid"); } private static void OnValidationEvent(object obj, ValidationEventArgs args) { _isValid = false; Console.WriteLine("Validation event/n" + args.Message); }