Java - Java con XML (Parseo de XSD)

 
Vista:

Java con XML (Parseo de XSD)

Publicado por llermo (13 intervenciones) el 02/09/2005 09:32:25
Saludos a todos!

Tengo un documento XML que hace referencia a una XSD y no consigo parsearla desde Java.

Aqui os pongo parte del codigo que estoy utilizando:

//INICIO CODIGO
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
factory.setAttribute("http://xml.org/sax/features/namespaces", Boolean.TRUE);
factory.setAttribute("http://xml.org/sax/features/validation", validaSchema);
factory.setAttribute("http://apache.org/xml/features/validation/schema", validaSchema);
factory.setAttribute("http://apache.org/xml/features/validation/schema-full-checking", validaSchema);
}
catch (Exception e) {
System.out.println(e);
}

StringWriter res = new StringWriter();

try {
StringBufferInputStream rdrXML = new StringBufferInputStream(XML);
DocumentBuilder builder = factory.newDocumentBuilder();

builder.setErrorHandler(this);
document = builder.parse(rdrXML);
}
catch (Exception e) {
System.out.println(e);
}
//FIN DEL CODIGO

Hay que decir tambien que hago una implementacion de la clase ErrorHandler.

Pues bien cuando le envio el documento XML para que lo parsee, se me devuelve lo siguiente:
org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: 'D:\basura\Order.xsd' is not a valid 'anyURI' value.

La cabecera del XML se compone de:
<ORDR xmlns="http://..." xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://... D:\basura\Order.xsd">

Si alguien puede indicarme donde esta el error o que estoy haciendo mal, seria de mucha ayuda.

Muchas gracias!
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

Java con XML (Parseo de XSD)

Publicado por rcc (1 intervención) el 04/12/2018 11:16:43
Hola, llego bastante tarde y creo que tengo el mismo problema que tú. No sé si te he entendido bien, yo lo que quiero hacer es incluir un xsi y un xsd en la cabecera del xml. ¿Podrías decirme cómo lo hiciste? Gracias.
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
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Java con XML (Parseo de XSD)

Publicado por Billy Joel (875 intervenciones) el 07/12/2018 23:09:44
Por muchos años trabajar con archivos XML era como horrocruxes y buscaba cualquier alternativa para notrabaja con eso. XML Parsers, DocumentFactory, SAX Builder, librerías de apache y todo eso nunca lo llegué a comprender, hasta que empecé a trabajar con JSON y la librería que te voy a contar lo hace todo tan fácil

Descargar la librería
Para descargar la librería te recomiendo esta https://github.com/stleary/JSON-java
Descargas el master, ahí vendrán unos archivos Java.
En tu proyecto vas a crear un nuevo paquete con el nombre org.json. En ese paquete vas a colocar los archivos .java de la librería y te debe quedar así:
44707938_10215950516889010_6330575464075100160_n

Con la librería lista entonces ya tendremos mitad del trabajo listo.

¿Qué queremos hacer, leer o escibir?
Cuando hablamos de XML usualmente se trata de leer o escribir y en ocaciones de enviar pero esa es otra historia.
Un asrchivo XML no es mas un archivo con una notación entonces lo que hay que hacer es leer o escribir.
Si tienes alguna duda con lectura o escritura de un archivo echale un ojo a esto: http://chuwiki.chuidiang.org/index.php?title=Lectura_y_Escritura_de_Ficheros_en_Java&fbclid=IwAR0-DzEEr2cpSrPI_B_z0N-PIGw59puGskrhbnJhpIAdbFD1k953xukCwpY#Lectura_de_un_fichero_de_texto_en_java

Supongamos que tenemos una lista de clientes y queremos escribir un archivo xml
44686799_10215950566650254_154070832073670656_n

Si quieres leer un archivo XML y el contenido transformarlo a un objeto mucho mas manejable entonces
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
33
public JSONObject leerArchivoXML(File archivoXML) {
    FileReader fr = null;
    BufferedReader br;
    JSONObject o = null;
    try {
        fr = new FileReader(archivoXML);
        br = new BufferedReader(fr);
 
        // Lectura del fichero
        String linea;
        int contadorLineas = 0; //Nos va indicar que línea estamos leyendo
        int lineaContenido = 3; //El contenido que nos interesa del xml no es la cabecera, es el cuerpo
        String contenido = "";
        while ((linea = br.readLine()) != null) {
            contadorLineas++;
            if(contadorLineas >= lineaContenido){
                contenido += linea;
            }
        }
        o = XML.toJSONObject(contenido);
    } catch (IOException e) {
        e.printStackTrace(System.out);
    } finally {
        try {
            if (null != fr) {
                fr.close();
            }
        } catch (IOException e2) {
            e2.printStackTrace(System.out);
        }
    }
    return o;
}

Un JSONObject no es mas que un Map envenenado Key Values
Para mas detalles sobre los Maps https://examples.javacodegeeks.com/java-basics/java-map-example/

Espero que esta solución te sirva, la he hecho con mucho cariño ya que así podemos combatir la tiranía de los SAXBuilders y los factories, etc...

Cualquier duda escribe...
Saludos,
;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar