Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Modificar estructura archivo XML

357 views
Skip to first unread message

Gero

unread,
Sep 14, 2009, 11:21:56 AM9/14/09
to
Hola:
Escribiendo esta vez para el manejo de archivos XML. Lo que pasa es
que tengo un archivo XML generado a traves de un dataset en VB NET
2005, con la funcion WriteXML, pero necesito cambiarle la estructura
al archivo generado.
A continuacion expongo los dos archivos XML que tengo:
ArchivoXML1.xml
************************************
Archivo generado:
<?xml version="1.0" standalone="yes" ?>
- <NewDataSet>
- <Table>
<IdLinea>1</IdLinea>
<Linea>Linea 1</Linea>
<Total>10</Total>
</Table>
- <Table>
<IdLinea>2</IdLinea>
<Linea>Linea 2</Linea>
<Total>20</Total>
</Table>
</NewDataSet>

***************************************************

Este es la estructura que necesito en el archivo XML:
ArchivoXML2Mod.XML

- <data>
- <variable name="Lineas">
- <row>
<column>1</column>
<column>Linea 1</column>
<column>10</column>
</row>
- <row>
<column>2</column>
<column>Linea 2</column>
<column>20</column>
</row>
</variable>
</data>

***********************************

Alguna opcion que me oriente sobre como cambiar la estructura del
archivo ArchivoXML1.xml , para que quede como la del archivo
ArchivoXML2Mod.XML


Gracias


Atte
Gpe. Geronimo

Alberto Poblacion

unread,
Sep 14, 2009, 12:50:40 PM9/14/09
to
"Gero" <geroni...@gmail.com> wrote in message
news:d2a9aa1b-ec48-4f86...@g1g2000vbr.googlegroups.com...
> [...] tengo un archivo XML generado a traves de un dataset en VB NET

> 2005, con la funcion WriteXML, pero necesito cambiarle la estructura
> al archivo generado. [...]

Habr�a varias formas de hacerlo. Una ser�a cargar el archivo en memoria
en un contenedor adecuado para ello, por ejemplo, un XmlDocument, y luego
con una serie de bucles ir recorriendo el XmlDocument y usando un
XmlTextWriter para ir generando, uno por uno, cada nodo del archivo de
salida. Por cierto, si vas a hacer esto, no es necesario que pases el
DataSet a un fichero Xml para luego leer ese fichero. Podr�as usar un
XmlDataDocument para procesar directamente el Xml del DataSet. Otra opci�n
ser�a recorrer directamente el DataSet con un bucle, e ir escribiendo con el
XmlTextWriter los nodos del archivo de salida.

Otra posibilidad ser�a crear una clase que tenga los datos que quieres
escribir en el Xml final y decorar sus campos cuando sea necesario con los
atributos de serializaci�n de Xml taes como [XmlElement]. Los datos los
copiar�as (con un bucle) desde el Dataset (o el Xml original) a esa clase, y
luego usar�as el XmlSerializer para volcar la clase a un archivo XML, que te
quedar�a en el formato deseado si la clase est� correctamente dise�ada. Por
cierto, si tienes el esquema XSD del archivo final, la clase se puede
generar autom�ticamente a partir del esquema mediante el comando XSD.EXE.

Finalmente, queda la posibilidad de usar una transformaci�n XSL para
pasar del XML que tienes al XML que quieres tener. La dificultad est� en que
necesitas conocer el lenguaje XSL para escribir el archivo .xsl con las
instrucciones de transformaci�n. Pero una vez que tienes el archivo xsl, la
programaci�n es sencill�sima porque basta con hacer una llamada la clase
XslTransform para que te convierta un archivo en el otro, as� que con un par
de l�neas de c�digo tendr�as todo resuelto.

Gero

unread,
Sep 14, 2009, 2:22:40 PM9/14/09
to
Hola Alberto:
gracias por la respuesta, pero queria preguntarte si tendrias algun
ejemplo para guiarme.


Gracias


On 14 sep, 11:50, "Alberto Poblacion" <earthling-
quitaestoparacontes...@poblacion.org> wrote:
> "Gero" <geronimo....@gmail.com> wrote in message
>
> news:d2a9aa1b-ec48-4f86...@g1g2000vbr.googlegroups.com...
>
> > [...] tengo un archivoXMLgenerado a traves de un dataset en VB NET


> > 2005, con la funcion WriteXML, pero necesito cambiarle la estructura
> > al archivo generado. [...]
>

>    Habría varias formas de hacerlo. Una sería cargar el archivo en memoria


> en un contenedor adecuado para ello, por ejemplo, un XmlDocument, y luego
> con una serie de bucles ir recorriendo el XmlDocument y usando un
> XmlTextWriter para ir generando, uno por uno, cada nodo del archivo de
> salida. Por cierto, si vas a hacer esto, no es necesario que pases el

> DataSet a un ficheroXmlpara luego leer ese fichero. Podrías usar un
> XmlDataDocument para procesar directamente elXmldel DataSet. Otra opción
> sería recorrer directamente el DataSet con un bucle, e ir escribiendo con el


> XmlTextWriter los nodos del archivo de salida.
>

>     Otra posibilidad sería crear una clase que tenga los datos que quieres
> escribir en elXmlfinal y decorar sus campos cuando sea necesario con los
> atributos de serialización deXmltaes como [XmlElement]. Los datos los
> copiarías (con un bucle) desde el Dataset (o elXmloriginal) a esa clase, y
> luego usarías el XmlSerializer para volcar la clase a un archivoXML, que te
> quedaría en el formato deseado si la clase está correctamente diseñada. Por


> cierto, si tienes el esquema XSD del archivo final, la clase se puede

> generar automáticamente a partir del esquema mediante el comando XSD.EXE.
>
>     Finalmente, queda la posibilidad de usar una transformación XSL para
> pasar delXMLque tienes alXMLque quieres tener. La dificultad está en que


> necesitas conocer el lenguaje XSL para escribir el archivo .xsl con las

> instrucciones de transformación. Pero una vez que tienes el archivo xsl, la
> programación es sencillísima porque basta con hacer una llamada la clase
> XslTransform para que te convierta un archivo en el otro, así que con un par
> de líneas de código tendrías todo resuelto.

Alberto Poblacion

unread,
Sep 14, 2009, 3:06:07 PM9/14/09
to
"Gero" <geroni...@gmail.com> wrote in message
news:fc1cdc0d-3df5-4bad...@l34g2000vba.googlegroups.com...

> gracias por la respuesta, pero queria preguntarte si tendrias algun
> ejemplo para guiarme.

�De cu�l de los m�todos? �Por cu�l te inclinas?
En general sabiendo el nombre de la clase que quieres usar, basta
buscarla en MSDN y suelen venir con un ejemplo. Por ejemplo, para ver c�mo
se graba un archivo XML con la clase XmlTextWriter, metes "XmlTextWriter" en
MSDN (http://msdn.microsoft.com) y encuentras inmediatamente un enlace a
este art�culo:

http://msdn.microsoft.com/es-es/library/system.xml.xmltextwriter.aspx

Si bajas un poco en la p�gina, inmediatamente te encuentras una serie de
fragmentos de c�digo que te indican c�mo escribir un archivo xml.
Desplegando las opciones en la pantalla de MSDN, te encuentras detallada la
explicaci�n de cada m�todo de la clase, normalmente acompa�ada de un
ejemplo.

Lo mismo pasa con cada una de las otras clases que te menciono. En
general todas tienen ejemplos en MSDN. O puedes pegar el nombre de la clase
en un buscador de internet, e inmediatamente encuentras docenas de ejemplos
de uso.
Por eso a la hora de responder a una pregunta del tipo de "c�mo har�a
tal cosa en .Net", es normal que te contesten s�mplemente diciendo "usa tal
clase", porque una vez que sabes cu�l es la clase que resuelve tu problema
es muy sencillo encontrar la explicaci�n y los ejemplos de c�mo se usa esa
clase.


Gero

unread,
Sep 14, 2009, 3:29:59 PM9/14/09
to
Hola Alberto:
Muchas gracias.
Voy a probar e intentar con el metodo que me mencionas al principio.
La informacion la tengo en un dataset, vinculado a un stored
procedure.


On 14 sep, 14:06, "Alberto Poblacion" <earthling-
quitaestoparacontes...@poblacion.org> wrote:
> "Gero" <geronimo....@gmail.com> wrote in message


>
> news:fc1cdc0d-3df5-4bad...@l34g2000vba.googlegroups.com...
>
> > gracias por la respuesta, pero queria preguntarte si tendrias algun
> > ejemplo  para guiarme.
>

>    ¿De cuál de los métodos? ¿Por cuál te inclinas?


>    En general sabiendo el nombre de la clase que quieres usar, basta

> buscarla en MSDN y suelen venir con un ejemplo. Por ejemplo, para ver cómo
> se graba un archivoXMLcon la clase XmlTextWriter, metes "XmlTextWriter" en


> MSDN (http://msdn.microsoft.com) y encuentras inmediatamente un enlace a

> este artículo:
>
>    http://msdn.microsoft.com/es-es/library/system.xml.xmltextwriter.aspx
>
>     Si bajas un poco en la página, inmediatamente te encuentras una serie de
> fragmentos de código que te indican cómo escribir un archivoxml.


> Desplegando las opciones en la pantalla de MSDN, te encuentras detallada la

> explicación de cada método de la clase, normalmente acompañada de un


> ejemplo.
>
>     Lo mismo pasa con cada una de las otras clases que te menciono. En
> general todas tienen ejemplos en MSDN. O puedes pegar el nombre de la clase
> en un buscador de internet, e inmediatamente encuentras docenas de ejemplos
> de uso.

>     Por eso a la hora de responder a una pregunta del tipo de "cómo haría
> tal cosa en .Net", es normal que te contesten símplemente diciendo "usa tal
> clase", porque una vez que sabes cuál es la clase que resuelve tu problema
> es muy sencillo encontrar la explicación y los ejemplos de cómo se usa esa
> clase.

Jose A. Fernandez

unread,
Sep 16, 2009, 4:50:48 PM9/16/09
to
Hola Gero

Me sumo a lo que te comenta Alberto...
Me parece que la opcion de decorar con atributos a la clase y
propiedades es la mejor, lo que no recuerdo es donde se realiza para
el Dataset (creo que hace un par de años que no utilizo Dataset)
Tendrias que buscar vos en que lugar genera la clase "tipada" y alli
colocar los atributos


Ejemplo (breve y sencillo) para entender la idea:
-----------------------------------------------
using System;
using System.Xml.Serialization;


[Serializable()]
[XmlRoot(Namespace = "http://comunidadnetjuarez.org/2007/04",
ElementName = "ejemploSerializarEnXML")]
public class MiClase
{
[XmlElement(ElementName = "propiedadCadena",
DataType = "string",
IsNullable = false)] // indica el nombre y tipo del elemento
public int PropiedadCadena {get; set}

[XmlAttribute(AttributeName = "valor")]
public int PropiedadValor {get; set}
...

Entonces se serializaria de esta forma

<?xml version="1.0" encoding="utf-16" ?>
<ejemploSerializarEnXML valor="100">
<propiedadCadena>valor de la propiedad</propiedadCadena>
</ejemploSerializarEnXML>


Enlaces
--------------

- Controlling XML Serialization Using Attributes
http://msdn.microsoft.com/es-es/library/2baksw0z(en-us,VS.85).aspx

- System.Xml.Serialization (Espacio de nombres)
El espacio de nombres System.Xml.Serialization contiene las clases
que se usan para serializar los objetos en documentos o secuencias con
formato XML.
http://msdn.microsoft.com/es-es/library/system.xml.serialization(VS.95).aspx

- XmlSerializer (Clase)
Serializa y deserializa objetos en documentos XML y desde ellos.
XmlSerializer permite controlar el modo en que se codifican los
objetos en XML.
http://msdn.microsoft.com/es-es/library/system.xml.serialization.xmlserializer(VS.95).aspx

Espero que te sirva de ayuda o guia
______________________
Jose A. Fernandez
blog: http://geeks.ms/blogs/fernandezja

0 new messages