CLR: .Net / Mono / Boo / Otros CLR > C#
recoger campos y valores de un XML y pasarlo a un datatable
+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
[#] Página Siguiente
Ir a la versión completa