Forums Últimos mensajes - Powered by IBM
 

Dataset a partir de archivo XML

14/12/2004 - 16:14 por lupcsytar | Informe spam
Hola,

La pregunta es si se puede crear una dataset a partir de una archivo
XML y si es así, cuál sería la estructura de este archivo -campos,
columnas, etc-.

Gracias!
 

Leer las respuestas

#1 Pedro Luna Montalvo, MVP
15/12/2004 - 02:59 | Informe spam
Saludos,

Por supuesto que se puede crear un DataSet a partir de datos XML, pues en
realidad el XML se utiliza como mecanismo de representacion interna de los
datos que contiene un DataSet.

Sobre la estructura, no te preocupes, que el DataSet es lo suficientemente
inteligente para inferir la estructura de un conjunto de datos XML, y te
pongo un ejemplo (esta en C#).

El siguiente es un archivo XML comun que contiene datos de personas. Este
archivo es DATA1.XML:

<Personas>
<Persona>
<Nombre>Pedro</Nombre>
<Apellido>Luna</Apellido>
<Hijo>
<Nombre>Pedro Jr.</Nombre>
<Apellido>Luna</Apellido>
</Hijo>
<Hijo>
<Nombre>Maria</Nombre>
<Apellido>Luna</Apellido>
</Hijo>
</Persona>

<Persona>
<Nombre>Juan</Nombre>
<Apellido>Lopez</Apellido>
<EstadoCivil>Soltero</EstadoCivil>
</Persona>

<Persona>
<Nombre>Martha</Nombre>
<Apellido>castro</Apellido>
<Hijo>
<Nombre>Julio</Nombre>
<Apellido>Solis</Apellido>
</Hijo>
</Persona>
</Personas>


Ahora el siguiente codigo es de un simple programa de consola que lee el
archivo DATA1.XML en un DataSet y muestra las tablas y las relaciones entre
esas tablas que el DataSet ha inferido a partir de los datos cargados:

using System;
using System.Data;

class TestXmlToDataSet {

public static void Main() {
DataSet ds = new DataSet();
ds.ReadXml("data1.xml");
PrintDataSet(ds);
}

private static void PrintDataSet(DataSet ds) {
foreach(DataTable dt in ds.Tables) {
Console.WriteLine("Tabla: {0} ({1} filas)", dt.TableName,
dt.Rows.Count);

foreach(DataRow dr in dt.Rows) {
foreach(DataColumn dc in dt.Columns) {
Console.Write(" {0} = {1};", dc.ColumnName,
dr[dc]);
}

Console.WriteLine();
}
}

Console.WriteLine("Relaciones");
foreach(DataRelation dr in ds.Relations) {
Console.Write(" {0} ( {1} ) --> {2} ( {3} )",
dr.ParentTable.TableName,
dr.ParentColumns[0].ColumnName,
dr.ChildTable.TableName,
dr.ChildColumns[0].ColumnName);
}
}
}


El resultado de este programa te mostrara que el DataSet ha creado dos
Tablas, ha agregado un ID para cada una de ellas, y ha creado una relacion
PADRE-HIJO entre esas tablas.

Saludos

Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

Preguntas similares