Diferencia entre revisiones de «Validaciones de XML contra XSD En Java»

De Dos Ideas.
Saltar a: navegación, buscar
 
(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:  
String mensaje = "<hola></hola>" //cadena que representa el contenido xml.
+
<code java>
XmlObject.Factory.parse(mensaje);
+
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.