webservice vb y xml

10/10/2006 - 14:51 por Eduardo Silva | Informe spam
Hola a todos,

Estoy medio complicado para devolver en un web service un conjunto de
datos.

Hasta ahora estaba devolviendo un dataset y todo funcionaba perfecto
pero ahi vino mi cliente que lo quiere en un formato xml distinto al que me
crea el data set alguien tiene idea de como ir creando el xml a partir del
dataset?

Muchas Gracias

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion [MVP]
10/10/2006 - 15:36 | Informe spam
"Eduardo Silva" wrote in message
news:
Hasta ahora estaba devolviendo un dataset y todo funcionaba perfecto
pero ahi vino mi cliente que lo quiere en un formato xml distinto al que
me crea el data set alguien tiene idea de como ir creando el xml a partir
del dataset?



Una solución más o menos rápida que se me ocurre es la de extraer el xml
del dataset a un XmlDataDocument, y a continuación usar un XslTransform para
aplicarle una transformada XSL que te lo deje en el formato que quieres.
Todo depende de cómo de complicado sea el formato que quiere tu cliente y
cuánto se parece al XML original que entrega el DataSet.
Otra alternativa sería pasar los datos del dataset a una Clase o
jerarquía de clases, y una vez cargadas usar un XmlSerializer para pasarlas
a XML. El formato de éste lo puedes controlar con atributos aplicados a los
campos de las clases.
Finalmente está el método de "fuerza bruta", consistente en recorrer con
unos bucles anidados el contenido del dataset e ir escribiendo los datos en
el formato XML que te interese (bien sea directamente en modo texto, o con
el auxilio de un XmlWriter).
Respuesta Responder a este mensaje
#2 Eduardo Silva
10/10/2006 - 16:18 | Informe spam
Gracias Alberto por tu pronta respuesta,

me parece que en este caso la "fuerza bruta" seria facil pero el problema es
que de la fuerza bruta solo me quedo lo de bruto porque estoy bastante
debil.

te cuento que estube intentando las 3 formas que me comentas

con la primera me lie un poco porque no tengo acceso al disco para cargar un
archivo xml

con la segunda estoy desde la maniana temprano y no voy tan mal consegui
devolver el xml bastante parecido pero como hay muchos niveles de arrays la
jerarquia de clases se va complicando cada vez mas.

La ultima seria la mejor solucion que veo porque ya tengo todo armadito en
stores precedures y con unas pocas lineas de codigo podria ir generando el
codigo pero no consigo hacerlo en memoria sin pasar por un archivo xml.

No tenes algun ejemplo de como ir hardcodeando las lineas del xml en una
variable?

Te agradezco mucho

Saludos Eduardo

"Alberto Poblacion [MVP]"
wrote in message news:%
"Eduardo Silva" wrote in message
news:
Hasta ahora estaba devolviendo un dataset y todo funcionaba perfecto
pero ahi vino mi cliente que lo quiere en un formato xml distinto al que
me crea el data set alguien tiene idea de como ir creando el xml a partir
del dataset?



Una solución más o menos rápida que se me ocurre es la de extraer el
xml del dataset a un XmlDataDocument, y a continuación usar un
XslTransform para aplicarle una transformada XSL que te lo deje en el
formato que quieres. Todo depende de cómo de complicado sea el formato que
quiere tu cliente y cuánto se parece al XML original que entrega el
DataSet.
Otra alternativa sería pasar los datos del dataset a una Clase o
jerarquía de clases, y una vez cargadas usar un XmlSerializer para
pasarlas a XML. El formato de éste lo puedes controlar con atributos
aplicados a los campos de las clases.
Finalmente está el método de "fuerza bruta", consistente en recorrer
con unos bucles anidados el contenido del dataset e ir escribiendo los
datos en el formato XML que te interese (bien sea directamente en modo
texto, o con el auxilio de un XmlWriter).


Respuesta Responder a este mensaje
#3 Alberto Poblacion [MVP]
10/10/2006 - 16:52 | Informe spam
"Eduardo Silva" wrote in message
news:
con la primera me lie un poco porque no tengo acceso al disco
para cargar un archivo xml



No hace falta acceder al disco. Se hace todo en memoria. Del DataSet se
saca un XmlDataDocument (en memoria). Se crea un XslTransform y se le asigna
el xsl con un Load (acepta un XmlReader que puede ser un XmlTextReader
conectado con un string), y luego se ejecuta la función Transform que envía
el resultado a un Stream o a un TextWriter, cualquiera de los cuales puede
enviar los resultados a memoria sin pasar por un archivo.

No tenes algun ejemplo de como ir hardcodeando las lineas del xml en una
variable?



Bueno, una forma es ir concatenando los tags en forma de texto, es
decir:

Dim sb as new StringBuilder("<?xml version...etc...>")
sb.Append("<Raiz">)
For (...) sb.Append("<Elemento>")
...etc...
Return sb.ToString()

Otra forma es unsar un XmlTextWriter, que aunque es usual dirigirlo a un
fichero, también lo puedes dirigir a cualquier TextWriter, incluyendo un
StringWriter:

Dim sw as New StringWriter()
Dim xtw as New XmlTextWriter(sw)
xtw .WriteStartElement("root")
xtw .WriteStartElement("item")
xtw .WriteEndElement()
xtw .WriteStartElement("item")
xtw .WriteEndElement()
xtw .WriteEndElement()
Return sw.ToString()
Respuesta Responder a este mensaje
#4 Eduardo Silva
10/10/2006 - 16:58 | Informe spam
Te pasaste muchas gracias



"Alberto Poblacion [MVP]"
wrote in message news:
"Eduardo Silva" wrote in message
news:
con la primera me lie un poco porque no tengo acceso al disco
para cargar un archivo xml



No hace falta acceder al disco. Se hace todo en memoria. Del DataSet se
saca un XmlDataDocument (en memoria). Se crea un XslTransform y se le
asigna el xsl con un Load (acepta un XmlReader que puede ser un
XmlTextReader conectado con un string), y luego se ejecuta la función
Transform que envía el resultado a un Stream o a un TextWriter, cualquiera
de los cuales puede enviar los resultados a memoria sin pasar por un
archivo.

No tenes algun ejemplo de como ir hardcodeando las lineas del xml en una
variable?



Bueno, una forma es ir concatenando los tags en forma de texto, es
decir:

Dim sb as new StringBuilder("<?xml version...etc...>")
sb.Append("<Raiz">)
For (...) sb.Append("<Elemento>")
...etc...
Return sb.ToString()

Otra forma es unsar un XmlTextWriter, que aunque es usual dirigirlo a
un fichero, también lo puedes dirigir a cualquier TextWriter, incluyendo
un StringWriter:

Dim sw as New StringWriter()
Dim xtw as New XmlTextWriter(sw)
xtw .WriteStartElement("root")
xtw .WriteStartElement("item")
xtw .WriteEndElement()
xtw .WriteStartElement("item")
xtw .WriteEndElement()
xtw .WriteEndElement()
Return sw.ToString()


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