Pasar un xml String a XML

368 views
Skip to first unread message

Claudio Rodríguez

unread,
Feb 5, 2009, 10:07:14 PM2/5/09
to ju...@googlegroups.com
Saludos listeros,

Lo primero que quiero es dar las gracias puesto que me han ayudado
bastante en algunos temas!!! así que muchas gracias espero poder ayudar
cuando pregunten en el futuro....(cuando tenga mas conocimientos claro)

Ahora mi duda... lo que sucede es lo siguiente tengo un WebServices que
me al llamarlo me retorna un xml pero dentro de un String, y me gustaría
pasar este xml que esta dentro del String a un XML, como podría hacer
esto???

Gracias!!

Ariel Alejandro Aguayo Bascu~an

unread,
Feb 5, 2009, 10:23:19 PM2/5/09
to ju...@googlegroups.com
On Fri, 6 Feb 2009, Claudio Rodríguez wrote:

> Ahora mi duda... lo que sucede es lo siguiente tengo un WebServices que
> me al llamarlo me retorna un xml pero dentro de un String, y me gustaría
> pasar este xml que esta dentro del String a un XML, como podría hacer
> esto???
>

No me queda muy clara tu pregunta: que es lo que llamas tu "un XML"?
Existen muchas formas de procesar un XML (asumo que a eso te refieres),
una posibilidad es aplicar una estrategia de (un)marshalling que significa
basicamente serializar y deserializar un Objeto en XML. Para que
entiendas.. digamos que tienes un XML asi:

<perro>
<patas>4</patas>
<cola>1</cola>
</perro>

Un proceso XML->Objeto crearia una instancia de una clase como esta:

public class Perro {
private int patas;
private int cola;
// Getters y Setters
}

Si es eso lo que quieres entonces puedes usar xstream
( http://xstream.codehaus.org/ ) o simple (
http://simple.sourceforge.net/home.php) ).

Otra herramienta que suelo sugerir para procesar XML es Digester.. si bien
la idea es similar a la anterior en realidad es un poco mas general porque
Digester permite ejecutar codigo arbitrario (no solo crear instancia de
algo) en funcion de lo que se lee de un XML. Puedes ver mas aca:

http://commons.apache.org/digester/

Por ultimo, cuando lo que quieres es recorrer, procesar y crear XML a mas
bajo nivel entonces puedes usar directamente cosas como jdom o SAX.

Salu2!


----
Ariel Aguayo B. (arag...@dcc.uchile.cl)

"Vale la pena morir por todo aquello sin lo cual no vale la pena vivir..."
Salvador Allende.

Claudio Rodríguez

unread,
Feb 6, 2009, 7:22:56 AM2/6/09
to ju...@googlegroups.com
Ariel Alejandro Aguayo Bascu~an escribió:
> On Fri, 6 Feb 2009, Claudio Rodríguez wrote:
>
>
>> [...]
Cuando me refiero a un xml String, es tener una estructura xml pero en
formato String ejemplo:

String xml = "<?xml version="1.0" encoding="UTF-8"?> <SII:RESPUESTA
xmlns:SII="http://www.sii.cl/XMLSchema"> <SII:RESP_BODY>
<ESTADO>00</ESTADO> <GLOSA>OK</GLOSA> <NOMBRE/>
<AP-PATERNO/> <AP-MATERNO/> <RAZON-SOCIAL>UNIVERSIDAD DE
SANTIAGO DE CHILE</RAZON-SOCIAL> </SII:RESP_BODY> </SII:RESPUESTA>"

entonces como es una estructura xml dentro de un String, me gustaría ver
la posibilidad de pasar esta estructura a un xml onda si se pudiese
hacer un cast a XML

Danijel Arsenovski

unread,
Feb 6, 2009, 7:53:16 AM2/6/09
to ju...@googlegroups.com

El problema es que mensaje SOAP tiene formato XML, por lo que terminarías con un documento XML dentro del otro y esto no es un XML bien formateado, el pareseador no te lo va a aceptar. Lo mismo cuando tratas de mandar un binario (imagen etc.).

Solución es codificar el XML base 64:

http://www.javaworld.com/javatips/jw-javatip117.html

 

Sin embargo, tener que mandar Xml por el SOAP “no huele bien”. En general, protocolo SOAP pretende definir métodos tipificados y con cierta semántica. Por ejemplo, en lugar de “enviarXml(xml)” tendrías “guardarPero(Pero pero)” y dejas que tu SOAP toolkit se encarga de protocolo…

 



From: Claudio Rodríguez <crod...@gmail.com>
To: ju...@googlegroups.com
Sent: Friday, February 6, 2009 9:22:56 AM
Subject: Re: Pasar un xml String a XML

Juan C. Olivares

unread,
Feb 6, 2009, 8:00:12 AM2/6/09
to ju...@googlegroups.com
2009/2/6 Danijel Arsenovski <darse...@yahoo.com>

El problema es que mensaje SOAP tiene formato XML, por lo que terminarías con un documento XML dentro del otro y esto no es un XML bien formateado, el pareseador no te lo va a aceptar. Lo mismo cuando tratas de mandar un binario (imagen etc.).

No es necesariamente así. Si el servidor ya lo está enviando, entonces lo está codificando como texto (un xml text) y queda algo así:

&lt;documento&gt; .... &lt;/documento&gt;

Al otro lado, el cliente SOAP debería ser capaz de resolver estas codificaciones. Yo creo que no es un problema TAN grave (aunque es poco oficiente).

Finalmente, lo que se debe hacer, según lo que hablé con Ariel (que probablemente no va a ir a trabajar antes de dos horas más... mentira... excelente trabajador, denle peguita), es que necesita pasarle un StringReader al parser XML.



--
Atte,
Juan Cristóbal Olivares

==============

Renovarse o morir: Mi PC de los sesenta tenía veinte mil militantes. Y mi PC del siglo XXI tiene cuarenta gigabytes.

Jose Miguel Selman

unread,
Feb 6, 2009, 8:03:05 AM2/6/09
to ju...@googlegroups.com
En Web Services existen dos tipos de estilos: RPC y Mensajes. Con RPC (Remote Procedure Call) el servicio espera parámetros de tipos XSD... He visto millones de veces el paso de un XML en un parámetro tipo String de servicios RPC... Funciona pero es algo absurdo cuando uno mira lo que va "en el cable"... Si lo que quieres es intercambiar un mensaje lo más razonable es usar estilo Mensaje en la llamada del WS. 

Saludos,  
--
Jose M. Selman




Gabriel Acevedo H.

unread,
Feb 6, 2009, 8:07:19 AM2/6/09
to ju...@googlegroups.com
Quizá mal entendimos al hombre. Creo que él tiene un String XML, y
quiere un DOM. Si es así, entonces la sugerencia de Ariel de usar SAX
sería la correcta.
Mira el segundo método de la siguiente página:

http://soaagenda.com/journal/articulos/document-a-string/

¡Saludos!


2009/2/6 Juan C. Olivares <jua...@gmail.com>:
--
-------------------------------------------
Gabriel Acevedo H.

Cesar A. Ogalde H.

unread,
Feb 6, 2009, 8:31:21 AM2/6/09
to ju...@googlegroups.com
Que use xpath para obtener los datos que opina el grupo ?

Saludos
Enviado desde mi equipo BlackBerry® de Claro

-----Original Message-----
From: "Gabriel Acevedo H." <gace...@gmail.com>

Date: Fri, 6 Feb 2009 10:07:19
To: <ju...@googlegroups.com>
Subject: Re: Pasar un xml String a XML



Jose Miguel Selman

unread,
Feb 6, 2009, 8:34:56 AM2/6/09
to ju...@googlegroups.com
Para usar XPath debe tener primero una representación DOM del
documento eso sí ...

Ariel Alejandro Aguayo Bascu~an

unread,
Feb 6, 2009, 8:44:01 AM2/6/09
to ju...@googlegroups.com
On Fri, 6 Feb 2009, Jose Miguel Selman wrote:

Digester tb usa XPath con una API de mas alto nivel:

http://www.javaworld.com/javaworld/jw-10-2002/jw-1025-opensourceprofile.html?page=2

>
> Para usar XPath debe tener primero una representación DOM del
> documento eso sí ...
>

----

Jose Miguel Selman

unread,
Feb 6, 2009, 8:50:51 AM2/6/09
to ju...@googlegroups.com
Para pasar de XML a objetos Java o viceversa
JAXB --> http://java.sun.com/developer/technicalArticles/WebServices/jaxb/
XStream --> http://xstream.codehaus.org/

Saludos,
--
Jose M. Selman
jose....@gmail.com





Luis Arce

unread,
Feb 6, 2009, 8:57:06 AM2/6/09
to ju...@googlegroups.com
Hola,
Para pasar de un String a XML generalmente uso un StringReader: http://www.java2s.com/Code/JavaAPI/javax.xml.parsers/DocumentBuilderFactorynewDocumentBuilder.htm

Pero si requieres que el xml no cambie en su estructura para poder operarlo sin que se caiga por la falta de elementos, como por ejemplo cargrarlo en una base de datos relacional (puede ser directo en una base xml) debes tener un XSD con el cual confrontar el XML.
Saludos



> From: jose....@gmail.com
> To: ju...@googlegroups.com
> Subject: Re: Pasar un xml String a XML

Sonic

unread,
Feb 6, 2009, 8:58:39 AM2/6/09
to ju...@googlegroups.com
sino podi usar la vieja técnica que es vieja y mula pero no deja de ser útil sobre todo si tienes memoria ta tirar a la chuña y no te importa que el documento sea leído entero y cargado en una estructura tipo árbol (en wen chileno si te importa que funcione no ma) puedes usar JDOM, ahi te puse un link, es fácil de usar.

http://www.programacion.com/java/tutorial/javaxml/3/

saludos


2009/2/6 Jose Miguel Selman <jose....@gmail.com>

Jose Urzua

unread,
Feb 6, 2009, 4:25:02 PM2/6/09
to ju...@googlegroups.com
Hola,

Te recomiendo utilizar SAXBuilder:

SAXBuilder sax = new SAXBuilder();
Document xmlDom = sax.build(new ByteArrayInputStream(stringComoXML.getBytes()));

En donde "stringComoXML" es un string que contiene el XML que quieres
llevar a un objeto que representa xml, en este caso xmlDom que es de
tipo org.jdom.Document.

El día 6 de febrero de 2009 0:07, Claudio Rodríguez
<crod...@gmail.com> escribió:
--
José Urzúa Reinoso
http://jose.cl
Reply all
Reply to author
Forward
0 new messages