Diferencia entre revisiones de «Validaciones de XML contra XSD En Java»
(No se muestran 2 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
[[Category:Java]] | [[Category:Java]] | ||
− | Necesidad | + | '''Necesidad''' |
validar que un XML está formado de acuerdo a las reglas de un XSD. | validar que un XML está formado de acuerdo a las reglas de un XSD. | ||
− | Solución | + | '''Solución''' |
Para validar un xml, podemos aplicar lo siguiente: | Para validar un xml, podemos aplicar lo siguiente: | ||
− | + | <code java> | |
import javax.xml.XMLConstants; | import javax.xml.XMLConstants; | ||
import javax.xml.transform.Source; | import javax.xml.transform.Source; | ||
Línea 34: | Línea 34: | ||
} | } | ||
} | } | ||
− | + | </code> | |
En el código anterior utilizamos la clase '''XmlObject'''. Podemos obtener una instancia de dicho elemento utilizando: | En el código anterior utilizamos la clase '''XmlObject'''. Podemos obtener una instancia de dicho elemento utilizando: | ||
− | + | <code java> | |
− | + | String mensaje = "<hola></hola>"; //cadena que representa el contenido xml. | |
+ | XmlObject.Factory.parse(mensaje); | ||
+ | </code> | ||
Este método constructor de XmlObject acepta varias formas de pasarle el xml a parsear. Es cuestión de buscar la manera que más se adapte a como nosotros recibimos el xml (por un String, archivo, url, etc). | Este método constructor de XmlObject acepta varias formas de pasarle el xml a parsear. Es cuestión de buscar la manera que más se adapte a como nosotros recibimos el xml (por un String, archivo, url, etc). | ||
Finalmente, al invocar '''validator.validate(source);''' obtendremos la validación del documento. Si no conformara alguna de las condiciones del XSD, arrojará la excepción '''SAXException''', y si no se logra encontrar el xsd, arroja '''IOException'''. | Finalmente, al invocar '''validator.validate(source);''' obtendremos la validación del documento. Si no conformara alguna de las condiciones del XSD, arrojará la excepción '''SAXException''', y si no se logra encontrar el xsd, arroja '''IOException'''. |
Revisión actual del 12:24 5 dic 2012
Necesidad validar que un XML está formado de acuerdo a las reglas de un XSD.
Solución Para validar un xml, podemos aplicar lo siguiente:
import javax.xml.XMLConstants; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import java.io.IOException; import java.net.URL; import org.apache.xmlbeans.XmlObject; import org.xml.sax.SAXException; public class ValidadorXml { /** * Para crear un Schema a partir de un XSD. */ private static SchemaFactory schemaFactory; static { schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); } public static void validarXml(String pathXsd, XmlObject xml) throws IOException, SAXException { Schema schema = schemaFactory.newSchema(new URL(pathXsd)); Validator validator = schema.newValidator(); Source source = new StreamSource(xml.newInputStream()); validator.validate(source); } }
En el código anterior utilizamos la clase XmlObject. Podemos obtener una instancia de dicho elemento utilizando:
String mensaje = "<hola></hola>"; //cadena que representa el contenido xml.
XmlObject.Factory.parse(mensaje);
Este método constructor de XmlObject acepta varias formas de pasarle el xml a parsear. Es cuestión de buscar la manera que más se adapte a como nosotros recibimos el xml (por un String, archivo, url, etc).
Finalmente, al invocar validator.validate(source); obtendremos la validación del documento. Si no conformara alguna de las condiciones del XSD, arrojará la excepción SAXException, y si no se logra encontrar el xsd, arroja IOException.