validate example against java xml validation xsd

example - XML con XSD JAVA



validate xsd java example (4)

Se me ha asignado un trabajo para validar un XML contra un XSD y, si todo pasa, analizará el XML para que pueda importarlo a mi sistema.

Mi Qyestion es la mejor forma de validar un XML contra el XSD y cuál es la mejor API para analizar XML en mi objeto de dominio.

Buscando sugerencias valiosas



Parte 1 - Validar XML

Puede usar las API javax.xml.validation para esto.

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); URL schemaURL = // The URL to your XML Schema; Schema schema = sf.newSchema(schemaURL); Validator validator = schema.newValidator(); validator.validate(xml);

Parte 2 - OXM

Con respecto a la segunda parte de su pregunta, la mejor API para analizar XML en el objeto de dominio es JAXB. JAXB es una especificación con múltiples implementaciones. Dirijo la implementación de MOXy JAXB que contiene extensiones útiles, como el mapeo basado en XPath .

Siempre puedes hacer la validación durante la conversión de XML a objetos:

JAXBContext jc = JAXBContext.newInstance(Customer.class); Umarshaller unmarshaller = jc.createUnmarshaller(); SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); URL schemaURL = // The URL to your XML Schema; Schema schema = sf.newSchema(schemaURL); unmarshaller.setSchema(schema); Customer customer = (Customer) unmarshaller.unmarshal(xml);


Puede usar analizadores DOM o SAX para estas operaciones.

EDITAR Aquí algunos ejemplos con Sax Prsing

SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); factory.setNamespaceAware(true); SAXParser parser = factory.newSAXParser(); parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema"); XMLReader reader = parser.getXMLReader(); reader.setErrorHandler(new ErrorHandler(){ public void warning(SAXParseException e) throws SAXException { System.out.println(e.getMessage()); } public void error(SAXParseException e) throws SAXException { System.out.println(e.getMessage()); } public void fatalError(SAXParseException e) throws SAXException { System.out.println(e.getMessage()); } }); reader.parse(new InputSource("document.xml"));

(Tomé la fuente desde aquí )