serializar XML

29/11/2004 - 12:55 por Xabi | Informe spam
Buenas:

Tengo un problema al serializar un objeto a xml, y es que al hacer:
string xml = System.Text.Encoding.UTF8.GetString(mm.ToArray());

me lo hace correcto pero el XML q devuelve contiene la siguiente cabecera:

<?xml version=\"1.0\"?>

<fw_pedido xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">

El caso es que las contrabarras y los simbolos dan error al intentar
meter el XML en un dataset.

Como podria hacer para q el XML generado fuera correcto?



Gracias y saludos



Xabi

Preguntas similare

Leer las respuestas

#11 David Salgado.MVP
29/11/2004 - 20:34 | Informe spam
Te cuento, el problema es q no me deja ni guardar el contenido de la
variable XML en un string de fox


Ok, no se fox, a si que ahí no entro :P

por los simbolos. y lo peor es que
probando desde .NET como te comentaba antes, tb falla el metodo readXML
del
Dataset, con lo cual algo esta fallando. (URI no valido)



claro, el dataset espera un xml puro y duro, no un string XML. Con la forma
que te
he pasado yo en un par de niveles arriba, el dataset no casca al cargarlo.
De todos modos, la indentadión la podemos quitar trasteando un poco con
las
clases de xml, el problema son esas dichosas " que esas no las vamos a poder
quitar
del string nunca.

De todas maneras, en la mayoria de ejemplos que he visto, no veo q les
devuelva la cabecera rara q me devuelve a mi, sino qu e devuelve la
cabecera
normal:
<?xml version="1.0" encoding="utf-8"?> (sin contrabarras)



esa es la cabecera que se queda al escribir a consola o a archivo, pq se
interpretan
las secuencias de escape ( si te bajas el ejemplo y depurás verás las
secuencias de escape en las comillas).
Pero todo string con comillas ( dependiendo de como se representen los
string en el lenguaje )
llevará secuencia de escape. No se FP como he indicado antes, pero mucho me
choca que no acpte
ese string con comillas escapadas.

En cuanto a el xml como fichero fisico, lo que quiero evitar es eso mismo,
es decir, lo hago asi para que la informacion no ocupe espacio fisico si
no
q solo se envie hacia el com cuando se necesite, además de q no este
accesible mediante una direccion web.



ok, entonces descartado

No se, como ves el tema de pasar el string al COM?



Como no comparten tipos de datos xml, y supongo que no tienes opción de los
servicios web, pasaría del dataset y de complicaciones olímpicamente :)

xmlStr = xmlStr.Replace("","");
xmlStr = xmlStr.Replace("","");
xmlStr = xmlStr.Replace("\"","'"); // \" por comilla simple

No se me ocurre mucho más :D
igual en un grupo de foxpro te pueden dar otra solución O:)

Saludos,
David Salgado




"David Salgado" escribió en el mensaje
news:#
ahh ok :D

Es que el problema es que pongas el encoding que pongas, un string
siempre
va a tener que
escapar algunos caracteres especiales, pq esta representado en modo texto


la
estructura de un archivo. Aunque algunos te los puedas saltar con la


mítica
arroba.

Si tienes posibilidad de cambiar el com, ( descartando lo de reemplazar


del
principio del hilo que me parece que al final va a ser la buena...)
lo más fácil es que guardes el XML en un archivo y le pases al COM el


path
del archivo, para que lo consuma
limpio.

De todos modos si el COM recibe un string, supongo que debería de tener
en
cuenta este mismo formato con
elementos escapados.

¿ que error te da al pasar ese string al COM ?









"Xabi" wrote in message
news:cofm7v$ava$
> Bueno ya q estamos te explico el objetivo concreto :)
>
> Lo que quiero hacer es devolver XML a un objeto COM que tengo hecho en
> VFP.
> Por eso quiero pasarle un string, pq el VFP no tiene objetos dataset o


de
> ese tipo.
>
> Lo q no entiendo es, que me serialize y me convierta asi a string, con


las
> "\" y es mas, cuando hago Dataset.readxml(xmlString) me dice q el uri
> no
> es
> valido, vamos q el no interpreta lo q el mismo ha creado.
>
> Por eso lo q intentaba es q me devolviera el XML limpio, sin


contrabarras
> ni
> para poder coger el string desde el COM. Pero por lo visto no vale


ni
> desde .NET.
>
> O alguna configuración me falta o no se por donde va el tema.
>
> Como lo ves?
>
> Muchas gracias por responder
>
> Xabi
>
>
>
> "David Salgado,MVP" escribió en el mensaje
> news:
>> oks, ahi va... :D
>>
>> realmente, al pasar a string esta haciendo lo que debe,
>> que es escapar las \, a si que la otra solución es olvidarnos de los
> strings
>> y pasar directamente del xml serializado
>> a un dataset:
>>
>> DataSet ds = new DataSet();
>> ds.ReadXml( stream );
>>
>> o como mucho un paso intermedio con
>> xmldocument o algo asi.
>>
>> ¿ te vale con algo así o buscabas otra cosilla ?
>>
>> Saludos,
>>
>> David Salgado
>>
>>
>> "Xabi" wrote in message
>> news:cofg3k$jvh$
>> > Buenas David:
>> >
>> > Te pasteo el codigo: Lo primero q te pasteo es la clase, y despues
>> > la
>> > llamada a la serializacion:
>> >
>> > [XmlRoot(ElementName="fw_pedido", Namespace="abcdef") ]
>> >
>> > [XmlType(IncludeInSchema=false)]
>> >
>> > public class Pedido
>> >
>> > {
>> >
>> > public Pedido()
>> >
>> > {
>> >
>> > //Detalle=null;
>> >
>> > Detalle=new DetallePedido[0];
>> >
>> > }
>> >
>> > private string m_codigocliente;
>> >
>> >
>> > public string Cliente
>> >
>> > {
>> >
>> > get{return m_codigocliente;}
>> >
>> > set{m_codigocliente=value;}
>> >
>> > }
>> >
>> > [XmlElement("Detalle")]
>> >
>> > public DetallePedido[] Detalle;
>> >
>> > }
>> >
>> >
>> >
>> > -SERIALIZACION-
>> >
>> > Pedido P = new Pedido();
>> >
>> > P.Cliente="prueba"
>> >
>> > P.Detalle=DP;
>> >
>> >
>> > System.IO.MemoryStream mm=null;
>> >
>> > try
>> >
>> > {
>> >
>> > mm=new System.IO.MemoryStream();
>> >
>> > XmlSerializerNamespaces NameSpaces=new XmlSerializerNamespaces();
>> >
>> > NameSpaces.Add("","");
>> >
>> > Serializer.Serialize(mm,P,NameSpaces);
>> >
>> >
>> > }
>> >
>> > catch(Exception ee)
>> >
>> > {
>> >
>> > MensajeBox(ee.ToString());
>> >
>> > }
>> >
>> > finally
>> >
>> > {
>> >
>> > mm.Close();
>> >
>> > }
>> >
>> >
>> >
>> > string xml >> >> > System.Text.Encoding.GetEncoding(1252).GetString(mm.ToArray());
>> >
>>

>> >
>> > y aqui es donde me devuelve el XML con la cabecera erronea y los
> simbolos
>> > q hacen q la aplicacion casque.
>> >
>> >
>> >
>> > Saludos y muchas gracias
>> >
>> >
>> > Xabi
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > "David Salgado,MVP" escribió en el mensaje
>> > news:
>> >> Holas :D
>> >>
>> >> Me da que el problema esta a la hora de serializar,
>> >> ¿puedes pegar un poquillo más de código o comentar
>> >> cómo lo haces ?
>> >>
>> >> Lo más comodo es usar el XMLSerializer y los atributos.
>> >>
>> >> Saludos,
>> >>
>> >> David Salgado
>> >>
>> >>
>> >>
>> >> "Xabi" wrote in message
>> >> news:cofca9$7b2$
>> >> > Buenas :) Gracias por tu respuesta ante todo.
>> >> >
>> >> > Habia pensado en reemplazar todo aquello q estaba dando problemas
> pero
>> > no
>> >> > me
>> >> > parecia la solucion correcta.
>> >> >
>> >> > Preferiria saber pq me genera el XML de esa forma y no con la
> cabecera
>> >> > normal.
>> >> >
>> >> > Alguna idea?
>> >> >
>> >> > Saludos
>> >> >
>> >> > Xabi
>> >> >
>> >> >
>> >> > "David Salgado,MVP" escribió en el mensaje
>> >> > news:
>> >> >> ¿ has probado reemplzando /" por una comilla simple ' ?
>> >> >>
>> >> >> xml = xml.Replace("/"","'");
>> >> >>
>> >> >>
>> >> >> "Xabi" wrote in message
>> >> >> news:cof2m3$4jo$
>> >> >> > Buenas:
>> >> >> >
>> >> >> > Tengo un problema al serializar un objeto a xml, y es que al
> hacer:
>> >> >> > string xml =
>> >> >> > System.Text.Encoding.UTF8.GetString(mm.ToArray());
>> >> >> >
>> >> >> > me lo hace correcto pero el XML q devuelve contiene la


siguiente
>> >> > cabecera:
>> >> >> >
>> >> >> > <?xml version=\"1.0\"?>
>> >> >> >
>> >> >> > <fw_pedido xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
>> >> >> > xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">
>> >> >> >
>> >> >> > El caso es que las contrabarras y los simbolos dan error


al
>> >> > intentar
>> >> >> > meter el XML en un dataset.
>> >> >> >
>> >> >> > Como podria hacer para q el XML generado fuera correcto?
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > Gracias y saludos
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > Xabi
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida