XML - Validar .xml contra .dtd

 
Vista:

Validar .xml contra .dtd

Publicado por charlie (1 intervención) el 10/10/2003 15:33:13
hola me podeis decir como validar desde java, un fichero .xml contra otro .dtd, concretamente yo estoy utilizando un SAXparse.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Validar un archivo .xml contra un archivo .dtd utilizando SAXParser en Java

Publicado por Alejandro (258 intervenciones) el 10/07/2023 16:52:11
Para validar un archivo XML contra un archivo DTD utilizando SAXParser en Java, puedes seguir los siguientes pasos:

1. Prepara los archivos:
- Asegúrate de tener el archivo XML que deseas validar y el archivo DTD con el cual deseas validar el XML. Ambos archivos deben estar en el sistema de archivos accesible desde tu aplicación Java.

2. Configuración del SAXParser:
- Importa las clases necesarias:
1
2
3
4
5
6
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

- Crea una clase que implemente la interfaz `ErrorHandler` para capturar y manejar los errores de validación:
1
2
3
4
5
6
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;


- Configura el SAXParser para habilitar la validación y especificar el archivo DTD:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class XMLValidator {
    public static void main(String[] args) {
        try {
            // Obtén una instancia de SAXParserFactory
            SAXParserFactory factory = SAXParserFactory.newInstance();
 
            // Habilita la validación
            factory.setValidating(true);
 
            // Crea una instancia de SAXParser
            SAXParser parser = factory.newSAXParser();
 
            // Especifica el archivo DTD para la validación
            String dtdFilePath = "ruta/al/archivo.dtd";
            parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", dtdFilePath);
 
            // Crea una instancia de XMLValidationErrorHandler para manejar los errores de validación
            XMLValidationErrorHandler errorHandler = new XMLValidationErrorHandler();
 
            // Configura el ErrorHandler en el parser
            parser.setErrorHandler(errorHandler);
 
            // Parsea el archivo XML
            String xmlFilePath = "ruta/al/archivo.xml";
            parser.parse(new InputSource(xmlFilePath));
 
            System.out.println("El archivo XML ha sido validado con éxito contra el archivo DTD.");
        } catch (Exception e) {
            System.out.println("Ocurrió un error durante la validación: " + e.getMessage());
        }
    }
}

3. Asegúrate de reemplazar las rutas de los archivos `dtdFilePath` y `xmlFilePath` con las rutas reales de tus archivos DTD y XML.

4. Ejecuta la clase `XMLValidator` y observa los resultados. Si hay errores de validación, se mostrarán a través del `ErrorHandler`.

Con esta solución, puedes utilizar SAXParser en Java para validar un archivo XML contra un archivo DTD. Asegúrate de que el archivo DTD esté correctamente referenciado en el archivo XML utilizando la declaración `<!DOCTYPE>` correspondiente.

Si deseas validar contra un archivo XSD en lugar de un archivo DTD, tendrás que realizar algunos ajustes en el código y utilizar un `SchemaFactory` en lugar de la propiedad `schemaSource`.

Espero que esto te ayude a validar archivos XML contra archivos DTD utilizando SAXParser en Java.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar