error al leer archivo xml

Iniciado por Mauro10, 6 Junio 2013, 17:44 PM

0 Miembros y 2 Visitantes están viendo este tema.

Mauro10

Hola comu, les tengo una consulta, necesito leer un archivo xml generado por otro programa. e visto muchas guias y tutoriales. pero no puedo ni abrir el archivo, ya probe con dom, sax y ahora estoy probando con JDom.
todos el mismo error:


com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Byte no válido 1 de la secuencia UTF-8 de 1 bytes
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:687)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:557)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1753)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(XMLEntityScanner.java:1426)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2754)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:217)
at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:277)
at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:264)
at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1116)
at Vistas.Principal.archivosMouseClicked(Principal.java:258)


mi codigo para abrir el archivo es este:


import java.io.File;
import java.io.IOException;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

SAXBuilder builder = new SAXBuilder();
        File xmlFile = new File(RUTA COMPLETA DEL XML);
        try{
            Document document = (Document) builder.build( xmlFile );//ACA TIRA LA EXCEPCION
            Element rootNode = document.getRootElement();
            List list = rootNode.getChildren( "RaceResults" );
           
        }catch ( IOException io ) {
            io.printStackTrace();
        }catch ( JDOMException jdomex ) {
            jdomex.printStackTrace();
        }


mi archivo xml empieza asi:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rF [
<!ENTITY rFEnt "rFactor Entity">
]>
<rFactorXML version="1.0">
<RaceResults>
<Setting>Multiplayer</Setting>
<ServerName>rFactor</ServerName>
<PlayerFile>player</PlayerFile>
<DateTime>1369875530</DateTime>
<TimeString>2013/05/29 21:58:50</TimeString>
.
.
.
.
.


como ven en el xml, es generado por un juego, el rfactor, estoy haciendo un programa que me lea el Log, escrito en xml, y me muestre de manera mas amigable.

XML Original: https://docs.google.com/file/d/0B6Qrf-i_gvhfVFRiZW5GZHpmdU0/edit?usp=sharing

si alguien conoce algo sobre ese error, seria tan amable de darme una mano?

RyogiShiki

El problema radica en que ese archivo no es UTF-8, sino ISO-8859-1. Son codificaciones distintas, por eso no se puede leer. Esa es la causa del error, la solución sería convertir el archivo a UTF-8..


Mauro10

sabes como puedo convertir el archivo (mediante codigo) a UTF-8?

RyogiShiki

#3
Una forma de hacerlo sería agregando este método:

Código (java) [Seleccionar]
public String convertFileToUTF8String(File file, String originalEncoding) {

       try {
           FileInputStream fis = new FileInputStream(file);
           StringBuilder sb = new StringBuilder();
           BufferedReader br = new BufferedReader(new InputStreamReader(fis, originalEncoding));
           String line;
           while((line = br.readLine()) != null) {
               sb.append(line);
               sb.append('\n');
           }

           String contents = new String(sb.toString().getBytes("UTF-8"));
       } catch (Exception ex) {}

       return contents;
   }


Y entonces construyes el documento así:

Código (java) [Seleccionar]
Document document = (Document) builder.build(convertFileToUTF8String(new File("ruta/del/archivo"), "ISO-8859-1"));


Mauro10

Gracias!! lo estaré probando.