Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Mauro10 en 6 Junio 2013, 17:44 pm



Título: error al leer archivo xml
Publicado por: Mauro10 en 6 Junio 2013, 17:44 pm
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:

Código:
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:

Código:
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:

Código:
<?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 (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?


Título: Re: error al leer archivo xml
Publicado por: RyogiShiki en 6 Junio 2013, 21:17 pm
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..


Título: Re: error al leer archivo xml
Publicado por: Mauro10 en 7 Junio 2013, 01:22 am
sabes como puedo convertir el archivo (mediante codigo) a UTF-8?


Título: Re: error al leer archivo xml
Publicado por: RyogiShiki en 7 Junio 2013, 02:29 am
Una forma de hacerlo sería agregando este método:

Código
  1. public String convertFileToUTF8String(File file, String originalEncoding) {
  2.  
  3.        try {
  4.            FileInputStream fis = new FileInputStream(file);
  5.            StringBuilder sb = new StringBuilder();
  6.            BufferedReader br = new BufferedReader(new InputStreamReader(fis, originalEncoding));
  7.            String line;
  8.            while((line = br.readLine()) != null) {
  9.                sb.append(line);
  10.                sb.append('\n');
  11.            }
  12.  
  13.            String contents = new String(sb.toString().getBytes("UTF-8"));
  14.        } catch (Exception ex) {}
  15.  
  16.        return contents;
  17.    }

Y entonces construyes el documento así:

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


Título: Re: error al leer archivo xml
Publicado por: Mauro10 en 7 Junio 2013, 14:51 pm
Gracias!! lo estaré probando.