CLR: .Net / Mono / Boo / Otros CLR > C#

 recoger campos y valores de un XML y pasarlo a un datatable

(1/3) > >>

+Onis:
Buenas!! de antemano gracias, como siempre :)

querria saber, ya que no encuentro la suficiente documentacion explicita por internet, de como recoger campos y valores de un XML, y pasarlos a un datatable (para su posterior uso en una insercion de datos a oracle).

Cualquier ejemplo será bienvenido.

Muchisimas Gracias!

gabio2:
Primero checate esto:

http://www.tips.cl/2009/01/22/recorrer-xml-en-c/


luego esto:

http://www.devjoker.com/contenidos/Arti ... con-C.aspx

Una vez que hayas entendido como recorrer cada nodo del xml entonces necesitas crear la estructura de tu DataTable, para eso.. necesitas leer esto:

http://msdn.microsoft.com/es-es/library ... 80%29.aspx

igual siempre en el MSDN busca el DataColum y el DataRow,  te van a servir mucho. :) ...


te explicó la lógica:

1) RECORRES TU XML
2) POR CADA NODO TIENES QUE VER SUS SUBNODOS (CHILDNODES)
3) RECUERDA QUE CADA SUBNODO A SU VEZ PUEDE TENER MÁS SUBNODOS(SI ES QUE NO SABES LA ESTRUCTURA DEL XML QUE VAS A RECORRER, TENDRIAS QUE HACER UNA VALIDACIÓN PARA CHECAR SI ESE SUBNODO A SU VEZ TIENE MÁS NODOS)..
4) YA QUE RECORRES Y OBTIENES EL VALOR DEL NODO QUE TE INTERESA.. USAS UN OBJETO DE TIPO DATAROW (EL QUE TE DIJE QUE LEYERAS) Y LO AGREGAS AL DATA TABLE:

--- Código: C# --- //dr es un objeto de tipo datarow .dr = dtMiDataTable.Rows.NewRow();dr[Index] = ValorObtenidoDelXML;dtMiDataTable.Rows.Add(dr);  5) LISTO! :D ya tienes tu datatable.. :)....



Espero te sirva.. y sólo te va a servir SI LEES. si no lees es obvio que no vas a entender los puntos que te di.. un saludo.... :)..  P.D: cualquier duda acerca de algo que este en los links puedes preguntarme. :)

+Onis:
Hola muchas gracias por responder! te cuento...

ya tengo cogidos los valores de los nodos del xml, pero sin chillnodes...directamente los cojo sin estos.. los he asignado a una estrucutra publica.... Luego he creado un datatable,, que m vendria a ser lo mismo que la estrucutra que he creado(creo q voy por una via muy lenta...),,,y he relacionado estructura con datatable ...


Con todo esto mi intencion es poder recoger los campos que saco del XML y poderlos meter en variables para usarlas en un INSERT en una tabla de Oracle...pero mestoy liando un monton..xD

gabio2:
Depende de tú necesidad, es decir, si solo quieres recorrer el xml y obtener sus datos, entonces creo que podrias saltarte el paso de meterlos en un DataTable, y podrias aplicar los inserts/updates/deletes directamente cuando recorras el mismo XML..  todo eso.. lo podrias hacer directamente en un solo foreach... siento que debes pensar un poco en tu algoritmo.. y luego en la codificación.. :)..

+Onis:
Mi intencion es solo esa, recoger campos del XML e insertarlos

--- Código: C# ---   private DataTable CreaTabla()        {            DataTable PedidoTienda = new DataTable();            PedidoTienda.Clear();                        PedidoTienda.Columns.Add("idPedidoTienda", typeof(string));            PedidoTienda.Columns.Add("Pedido", typeof(int));            PedidoTienda.Columns.Add("IdentidadOrigenPedido", typeof(int));            PedidoTienda.Columns.Add("FechaPedido", typeof(DateTime));            PedidoTienda.Columns.Add("CodigoBarras", typeof(string));  return PedidoTienda;        }   

--- Código: C# --- CabPedido CPedido = new CabPedido();            XmlNodeList pedidostiendas =                xDoc.GetElementsByTagName("PedidoTienda");//idtabla=122-->PedidosTiendas  foreach (XmlElement nodo in pedidostiendas)            {                 int i = 0;                                 CPedido.idPedidoTienda = Convert.ToUInt32(nodo.GetElementsByTagName("IdPedidoTienda") [i].InnerText);                               if (CPedido.Pedido == null)                {                    CPedido.Pedido = Convert.ToInt32(nodo.GetElementsByTagName("Pedido")[i].InnerText);//nodo xsi.nil                }                               CPedido.IdentidadOrigenPedido = Convert.ToInt32(nodo.GetElementsByTagName("IdEntidadOrigenPedido")[i].InnerText);                CPedido.FechaPedido = Convert.ToDateTime(nodo.GetElementsByTagName("FechaPedido")[i].InnerText);                CPedido.CodigoBarras = nodo.GetElementsByTagName("CodigoBarras")[i].InnerText;  DataTable miTabla;                miTabla = CreaTabla();                 DataRow getpedido = miTabla.NewRow();//definicion del datarow del tipo DataTable(miTabla-->PedidoTienda)                 getpedido["idPedidoTienda"] = Convert.ToUInt32(nodo.GetElementsByTagName("IdPedidoTienda")[i].InnerText);                getpedido["Pedido"]=CPedido.Pedido ;                getpedido["IdentidadOrigenPedido"]=CPedido.IdentidadOrigenPedido ;                getpedido["FechaPedido"]=CPedido.FechaPedido ;                getpedido["CodigoBarras"]=CPedido.CodigoBarras ; miTabla.Rows.Add(getpedido);  

--- Código: C# ---  public class CabPedido //dentro el XML la primera tabla que                                //indica en este caso PEDIDOTIENDA        {            public long idPedidoTienda;            public int Pedido;            public int IdentidadOrigenPedido;            public DateTime FechaPedido;            public String CodigoBarras;                  
Bueno, he pasado la parte de codigo donde recojo los nodos y los metos en la tabla,,,pero tb uso una estrucutra,,,una de las dos creo que m sobra.... a ver si sabes orientarme minimamente, para recoger bien estas variables y poderlas usar en otra funcion que realice el INSERT en ORACLE(la conexion a oracle tb la tngo definida)
Muchas GRACIAS!!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa