DataSet a XML

29/07/2004 - 15:15 por Javier Ros | Informe spam
En un servicio web tengo esta función que recibe un DataSet y devuelve
el XML equivalente en un array de bytes:

private byte[] XMLData(DataSet ds)
{
// Escribimos el XML en memoria y lo extraemos en un array de bytes.
MemoryStream src = new MemoryStream();
ds.WriteXml(src, XmlWriteMode.WriteSchema);
byte [] buffer = src.GetBuffer();
src.Close();
return buffer;
}

Creo que es correcta, pero luego al leer el XML recibo un XMLException, he
hecho pruebas, si guardo el array de bytes en un fichero y lo habro me da el
mismo error, resulta que el metodo WriteXml del DataSet no me está
escribiendo
en la primera linea la cadena: <?xml version="1.0" standalone="yes"?>
si edito ese archivo e introduzco esa linea en la primera fila del archivo
si que lo
abre sin problemas.

que puede estar pasando?

Gracias.

Javier Ros Moreno

Preguntas similare

Leer las respuestas

#1 Javier Ros
29/07/2004 - 15:58 | Informe spam
Bueno, al no encontrar solucion, he encontrado los metodos GetXmlSchema y
GetXml(), que
devuelven el xml en un string, y sustitui la funcion por esta:

private byte[] XMLData(DataSet ds)
{
byte [] buffer Encoding.GetEncoding("windows-1252").GetBytes(ds.GetXml());
return buffer;
}

ya lo carga bien, pero necesito escribir tambien el esquema de datos, así
que hice esto:

byte [] buffer Encoding.GetEncoding("windows-1252").GetBytes(ds.GetXmlSchema() +
ds.GetXml());

esto me falla, puesto que la ultima linea del esquema y la primera del xml
se solapan en una, un da un XmlException
así que lo sustitui por:

byte [] buffer Encoding.GetEncoding("windows-1252").GetBytes(ds.GetXmlSchema() + "" +
ds.GetXml());

pero tambien me falla.

Estoy un poco perdido, no sabia que el xml era tan delicado, simple sí, pero
muy delicado, en el momento
que no hay algo bien peta, y lo peor es que solo salta un XmlException pero
no te dice porque.

Alguna idea?


"Javier Ros" $PAMHEREemuasa.es> escribió en el mensaje
news:
En un servicio web tengo esta función que recibe un DataSet y devuelve
el XML equivalente en un array de bytes:

private byte[] XMLData(DataSet ds)
{
// Escribimos el XML en memoria y lo extraemos en un array de bytes.
MemoryStream src = new MemoryStream();
ds.WriteXml(src, XmlWriteMode.WriteSchema);
byte [] buffer = src.GetBuffer();
src.Close();
return buffer;
}

Creo que es correcta, pero luego al leer el XML recibo un XMLException, he
hecho pruebas, si guardo el array de bytes en un fichero y lo habro me da


el
mismo error, resulta que el metodo WriteXml del DataSet no me está
escribiendo
en la primera linea la cadena: <?xml version="1.0" standalone="yes"?>
si edito ese archivo e introduzco esa linea en la primera fila del archivo
si que lo
abre sin problemas.

que puede estar pasando?

Gracias.

Javier Ros Moreno


Respuesta Responder a este mensaje
#2 Misael Monterroca
29/07/2004 - 18:09 | Informe spam
Por que no regresas el XML Directo?

¿Para que lo quieres utilizar de esta manera?

Saludos!
http://www.neo-mx.com/blog




"Javier Ros" $PAMHEREemuasa.es> wrote in message
news:
Bueno, al no encontrar solucion, he encontrado los metodos GetXmlSchema y
GetXml(), que
devuelven el xml en un string, y sustitui la funcion por esta:

private byte[] XMLData(DataSet ds)
{
byte [] buffer > Encoding.GetEncoding("windows-1252").GetBytes(ds.GetXml());
return buffer;
}

ya lo carga bien, pero necesito escribir tambien el esquema de datos, así
que hice esto:

byte [] buffer > Encoding.GetEncoding("windows-1252").GetBytes(ds.GetXmlSchema() +
ds.GetXml());

esto me falla, puesto que la ultima linea del esquema y la primera del xml
se solapan en una, un da un XmlException
así que lo sustitui por:

byte [] buffer > Encoding.GetEncoding("windows-1252").GetBytes(ds.GetXmlSchema() + "" +
ds.GetXml());

pero tambien me falla.

Estoy un poco perdido, no sabia que el xml era tan delicado, simple sí,


pero
muy delicado, en el momento
que no hay algo bien peta, y lo peor es que solo salta un XmlException


pero
no te dice porque.

Alguna idea?


"Javier Ros" $PAMHEREemuasa.es> escribió en el mensaje
news:
> En un servicio web tengo esta función que recibe un DataSet y devuelve
> el XML equivalente en un array de bytes:
>
> private byte[] XMLData(DataSet ds)
> {
> // Escribimos el XML en memoria y lo extraemos en un array de bytes.
> MemoryStream src = new MemoryStream();
> ds.WriteXml(src, XmlWriteMode.WriteSchema);
> byte [] buffer = src.GetBuffer();
> src.Close();
> return buffer;
> }
>
> Creo que es correcta, pero luego al leer el XML recibo un XMLException,


he
> hecho pruebas, si guardo el array de bytes en un fichero y lo habro me


da
el
> mismo error, resulta que el metodo WriteXml del DataSet no me está
> escribiendo
> en la primera linea la cadena: <?xml version="1.0" standalone="yes"?>
> si edito ese archivo e introduzco esa linea en la primera fila del


archivo
> si que lo
> abre sin problemas.
>
> que puede estar pasando?
>
> Gracias.
>
> Javier Ros Moreno
>
>


Respuesta Responder a este mensaje
#3 Javier Ros
30/07/2004 - 11:44 | Informe spam
Como que "regresar el XML Directo"?

Supongo que te refieres a devolver el array de bytes,
bien, se trata de un Servicio Web que accede a una base
de datos, lee unas tablas y las devuelve en XML. Si a eso
le añades que el servicio web va a ser llamado desde un
terminal que se conecta por GPRS, el trafico seria bastante
grande, por eso lo que hago es comprimir y despues mandar,
y comprimir debes comprimir arrays de bytes y no strings,
entonces el proceso es:

1) Acceder a la base de datos.
2) Leer los datos en un DataSet.
3) Pasar el DataSet a XML.
4) Comprimir el XML.
5) Develver un array de bytes.

Saludos,

Javier Ros Moreno


"Misael Monterroca" escribió en el mensaje
news:%23RXY$
Por que no regresas el XML Directo?

¿Para que lo quieres utilizar de esta manera?

Saludos!
http://www.neo-mx.com/blog




"Javier Ros" $PAMHEREemuasa.es> wrote in message
news:
> Bueno, al no encontrar solucion, he encontrado los metodos GetXmlSchema


y
> GetXml(), que
> devuelven el xml en un string, y sustitui la funcion por esta:
>
> private byte[] XMLData(DataSet ds)
> {
> byte [] buffer > > Encoding.GetEncoding("windows-1252").GetBytes(ds.GetXml());
> return buffer;
> }
>
> ya lo carga bien, pero necesito escribir tambien el esquema de datos,


así
> que hice esto:
>
> byte [] buffer > > Encoding.GetEncoding("windows-1252").GetBytes(ds.GetXmlSchema() +
> ds.GetXml());
>
> esto me falla, puesto que la ultima linea del esquema y la primera del


xml
> se solapan en una, un da un XmlException
> así que lo sustitui por:
>
> byte [] buffer > > Encoding.GetEncoding("windows-1252").GetBytes(ds.GetXmlSchema() + "" +
> ds.GetXml());
>
> pero tambien me falla.
>
> Estoy un poco perdido, no sabia que el xml era tan delicado, simple sí,
pero
> muy delicado, en el momento
> que no hay algo bien peta, y lo peor es que solo salta un XmlException
pero
> no te dice porque.
>
> Alguna idea?
>
>
> "Javier Ros" $PAMHEREemuasa.es> escribió en el mensaje
> news:
> > En un servicio web tengo esta función que recibe un DataSet y


devuelve
> > el XML equivalente en un array de bytes:
> >
> > private byte[] XMLData(DataSet ds)
> > {
> > // Escribimos el XML en memoria y lo extraemos en un array de bytes.
> > MemoryStream src = new MemoryStream();
> > ds.WriteXml(src, XmlWriteMode.WriteSchema);
> > byte [] buffer = src.GetBuffer();
> > src.Close();
> > return buffer;
> > }
> >
> > Creo que es correcta, pero luego al leer el XML recibo un


XMLException,
he
> > hecho pruebas, si guardo el array de bytes en un fichero y lo habro me
da
> el
> > mismo error, resulta que el metodo WriteXml del DataSet no me está
> > escribiendo
> > en la primera linea la cadena: <?xml version="1.0" standalone="yes"?>
> > si edito ese archivo e introduzco esa linea en la primera fila del
archivo
> > si que lo
> > abre sin problemas.
> >
> > que puede estar pasando?
> >
> > Gracias.
> >
> > Javier Ros Moreno
> >
> >
>
>


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