2009-01-14 26 views

Respuesta

6

Dependiendo del nivel de tolerancia y el informe de errores que desea tener, es posible encontrar la nueva API XML introducido en .NET 3.5 para ser útil - las clases XDocument, XElement, XAttribute y así sucesivamente, todos de la System.Xml.Linq namespace.

El diseño de la nueva Api XML estuvo muy influenciado por las lecciones aprendidas del antiguo diseño de XMLDocument, y es mucho más liviano y fácil de usar.

+0

Creo que esto es lo que estaba buscando. ¡Gracias! – dtc

2

Utilice los objetos XMLDocument y XMLNode.

Puede usar los métodos Load y LoadXML en XMLDocument para cargar un documento xml. Luego puede usar SelectSingleNode para obtener un valor basado en el XPath de ese nodo. O puede usar el método SelectNodes para cargar en un nodo completo.

Puede usar el método Validate del objeto XMLDocument para validar el XML contra un XSD.

10

Básicamente, para obtener una validación de XSD, necesitará usar un XmlReader con ReaderSettings que defina con qué archivo XSD validar y eventos para responder/detectar errores de validación.

Para leer el archivo XSD, usar algo como esto:

StreamReader xsdReader = new StreamReader(xsdFileName); 
XmlSchema Schema = new XmlSchema(); 
Schema = XmlSchema.Read(xsdReader, new ValidationEventHandler(XSDValidationEventHandler)); 

y el controlador de eventos para detectar los errores que pudieran aparecer durante la lectura de la XSD (por ejemplo, si en sí mismo no es válido) tendría este firma:

private static void XSDValidationEventHandler(object sender, ValidationEventArgs e) 

El mensaje de error está en e.Message.

Una vez que tenga el XSD cargado en la memoria, una instancia de su XmlReader y utilizar los ajustes adecuados para hacer cumplir la validación XSD: controlador de eventos

XmlReaderSettings ReaderSettings = new XmlReaderSettings();  
ReaderSettings.ValidationType = ValidationType.Schema; 
ReaderSettings.Schemas.Add(Schema); 
ReaderSettings.ValidationEventHandler += new ValidationEventHandler(XMLValidationEventHandler); 

Este error tiene la misma firma que la anterior.

Entonces realmente leer el fichero de principio a fin:

XmlTextReader xmlReader = new XmlTextReader(xmlFileName); 
XmlReader objXmlReader = XmlReader.Create(xmlReader, ReaderSettings); 
while (objXmlReader.Read()) { } 

Si algún error de validación se produjeron, el controlador de eventos se llamaba, y se puede capturar los mensajes de error allí y, por ejemplo, mostrarlos al usuario (o simplemente tener una bandera que indique si la validación fue exitosa o no; su llamada :))

+0

Gracias. Esto también es parte de lo que estaba buscando. Ojalá pudiera marcar dos respuestas como soluciones. – dtc

Cuestiones relacionadas