Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Problema con xml

Estas en el tema de Problema con xml en el foro de Java en Foros del Web. Gente, estoy trabajando con lectura de xml, de las nuevas facturas electrónicas, pero estoy teniendo un problema al momento de abrir el archivo. Me dice ...
  #1 (permalink)  
Antiguo 04/09/2015, 09:57
 
Fecha de Ingreso: agosto-2015
Mensajes: 24
Antigüedad: 4 años, 2 meses
Puntos: 0
Problema con xml

Gente, estoy trabajando con lectura de xml, de las nuevas facturas electrónicas, pero estoy teniendo un problema al momento de abrir el archivo.

Me dice lo siguiente

[Fatal Error] 12103543000162012.xml:2:6: El destino de la instrucción de proceso correspondiente "[xX][mM][lL]" no está permitido.
Exception in thread "main" org.xml.sax.SAXParseException: El destino de la instrucción de proceso correspondiente "[xX][mM][lL]" no está permitido.

Si yo quiero ver el arbol xml desde el navegador, también me da error

XML Parsing Error: XML or text declaration not at start of entity
Location: file:///C:/Users/IBM_ADMIN/Desktop/XML%20JAVA/xml%20distintos%20paises/Uruguay/12103543000162012.xml
Line Number 2, Column 1:

Bueno, abriendo desde Notepad, observo que el xml tiene 2 encodings declarados al principio

<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="utf-8"?>

Si elimino el encoding <?xml version="1.0" encoding="utf-8"?> el xml me abre perfecto desde java, lo recorro excelente. Y desde el navegador lo veo perfecto también.

El problema es que vienen así, yo no puedo hacer nada para arreglarlo, porque es una factura electrónica que tiene que leer el sistema. La afip o dgi los genera asi... Osea que las soluciones de abrir a mano y modificar el encabezado con los encodings es imposible, ya que el sistema va a tener que agarrar los xml y procesarlos automáticamente...

¿alguno sabe que puedo hacer?

Última edición por wagego; 04/09/2015 a las 10:32
  #2 (permalink)  
Antiguo 04/09/2015, 10:59
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 8 años, 8 meses
Puntos: 78
Respuesta: Problema con xml

Cita:
Iniciado por wagego Ver Mensaje
Si elimino el encoding <?xml version="1.0" encoding="utf-8"?> el xml me abre perfecto desde java, lo recorro excelente. Y desde el navegador lo veo perfecto también.
Entonces, si el resultado final es exitoso 100% yo lo que haría es desde JAVA quitar esa parte (en caso de existir) antes de leer el fichero en XML.
  #3 (permalink)  
Antiguo 04/09/2015, 13:28
 
Fecha de Ingreso: agosto-2015
Mensajes: 24
Antigüedad: 4 años, 2 meses
Puntos: 0
Respuesta: Problema con xml

Cita:
Iniciado por ElAthlit Ver Mensaje
Entonces, si el resultado final es exitoso 100% yo lo que haría es desde JAVA quitar esa parte (en caso de existir) antes de leer el fichero en XML.
No es mala idea, espero que me lo dejen aplicar (más por el tema de modificar una "factura".

Igualmente no borrar el "nodo" del xml... Si pongo "encoding=\"utf-8" si, pero el nodo completo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" no..
Código:
Path path = Paths.get("C:/Users/IBM_ADMIN/Desktop/XML JAVA/xml distintos paises/Uruguay/12103543000162012.xml");
		Charset charset = StandardCharsets.UTF_8;
     
                //Asi figura en el xml <?xml version="1.0" encoding="utf-8"?>
		search = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
		String content = null;
		try {
			content = new String(Files.readAllBytes(path), charset);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(search);
		content = content.replaceAll(search, "");
		try {
			Files.write(path, content.getBytes(charset));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
Probe haciendo con un readline, pero no sirve...
  #4 (permalink)  
Antiguo 05/09/2015, 10:53
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 5 años, 3 meses
Puntos: 182
Respuesta: Problema con xml

Buenas,

Cita:
no es mala idea, espero que me lo dejen aplicar (más por el tema de modificar una "factura".
No tienes que modificar el fichero de la factura.
Cargas el fichero en un String en memoria, luego le quitas el primer <?xml[...] y posteriormente procesas dicho String modificado como XML. Todo en memoria.

Cita:
igualmente no borrar el "nodo" del xml... Si pongo "encoding=\"utf-8" si, pero el nodo completo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" no..
No entiendo nada de lo que dices.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 05/09/2015, 12:37
 
Fecha de Ingreso: agosto-2015
Mensajes: 24
Antigüedad: 4 años, 2 meses
Puntos: 0
Respuesta: Problema con xml

Mi XML empieza de la siguiente manera.

<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="utf-8"?><EnvioCFE_entreEmpresas xmlns:xsd="http:....................... etc.

Si hago un:
XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReade r( new FileReader( file ) );

el String encodingFromXMLDeclaration = xmlStreamReader.getCharacterEncodingScheme(); me dice que es un ISO-8859-1

Ahora, entiendo entonces que deberia borrar la parte de <?xml version="1.0" encoding="utf-8"?> ya que al decirme que es un ISO-8859-1 esa declaración no la tengo que borrar.

Profesor_Falken ¿cómo hago para hacer lo que me sugeriste teniendo el XML en el escritorio?.

Yo lo que hago para recorrer el xml (los pases que andan bien es lo siguiente).

public Document lectorFileXML(String ruta) throws ParserConfigurationException, SAXException, IOException {

xmlFile = new File(ruta);
documentFactory = DocumentBuilderFactory.newInstance();
documentBuilder = documentFactory.newDocumentBuilder();
doc = documentBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();

return doc;

}

y luego a ese documento (doc) que esta parseado le voy preguntando valores de ciertos tags (o nodos)
Element el = (Element) doc.getElementsByTagName(tag).item(0);
  #6 (permalink)  
Antiguo 05/09/2015, 12:51
 
Fecha de Ingreso: agosto-2015
Mensajes: 24
Antigüedad: 4 años, 2 meses
Puntos: 0
Respuesta: Problema con xml

Aclaro, hice la lectura del file y guardarlo en otro file para ver como quedaba

Cita:
File inputFile = new File("C:/Users/IBM_ADMIN/Desktop/XML JAVA/xml distintos paises/Uruguay/12103543000162012.xml");
File tempFile = new File("C:/Users/IBM_ADMIN/Desktop/XML JAVA/xml distintos paises/Uruguay/BKUP12103543000162012.xml");

BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

String lineToRemove = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
String currentLine;


while((currentLine = reader.readLine()) != null) {
// trim newline when comparing with lineToRemove
String trimmedLine = currentLine.trim();
if(trimmedLine.equals(lineToRemove)) continue;
System.out.println(trimmedLine);
writer.write(currentLine + System.getProperty("line.separator"));
}
writer.close();
reader.close();
Pero el reader.readLine() no me encuentra el string que debo borrar, el system.out.println me arroja lo siguiente

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml version="1.0" encoding="utf-8"?><EnvioCFE_entreEmpresas xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ve.......

y no borra el " <?xml version="1.0" encoding="utf-8"?> "

Nisiquiera haciendo una simple prueba como la siguiente

Cita:
String completo = new String();
String limpio = new String();
String txtaborrar = new String();

txtaborrar = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";

completo = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><?xml version=\"1.0\" encoding=\"utf-8\"?><En";

limpio = completo.replaceAll(txtaborrar, "");

System.out.println(limpio);
el cual me da como resultado <?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="utf-8"?><En

Me parece que hay un tema con los caracteres que tiene el string (las comillas, los ?, y los <>)

Última edición por wagego; 05/09/2015 a las 13:36
  #7 (permalink)  
Antiguo 05/09/2015, 16:25
 
Fecha de Ingreso: agosto-2015
Mensajes: 24
Antigüedad: 4 años, 2 meses
Puntos: 0
Respuesta: Problema con xml

El problema era que no me tomaba el caracter ? . Necesito un escape para que no reconozca \\?

Al final quedaba así el encoding a buscar

<\\?xml version=\"1.0\" encoding=\"utf-8\"\\?>

Etiquetas: xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:11.