Diferencia entre revisiones de «Validaciones de XML contra XSD En Java»
| Línea 6: | Línea 6: | ||
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 del 12:19 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.