• Lunes 18 de Noviembre de 2024, 02:45

Autor Tema:  recoger campos y valores de un XML y pasarlo a un datatable  (Leído 9080 veces)

+Onis

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
recoger campos y valores de un XML y pasarlo a un datatable
« en: Jueves 30 de Junio de 2011, 11:21 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #1 en: Jueves 30 de Junio de 2011, 23:53 »
0
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#
  1.  
  2. //dr es un objeto de tipo datarow .
  3. dr = dtMiDataTable.Rows.NewRow();
  4. dr[Index] = ValorObtenidoDelXML;
  5. dtMiDataTable.Rows.Add(dr);
  6.  
  7.  
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. :)
@gabio87

+Onis

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #2 en: Viernes 1 de Julio de 2011, 00:15 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #3 en: Viernes 1 de Julio de 2011, 00:36 »
0
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.. :)..
@gabio87

+Onis

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #4 en: Viernes 1 de Julio de 2011, 09:15 »
0
Mi intencion es solo esa, recoger campos del XML e insertarlos
Código: C#
  1.  
  2.  
  3.  private DataTable CreaTabla()
  4.         {
  5.             DataTable PedidoTienda = new DataTable();
  6.             PedidoTienda.Clear();
  7.            
  8.             PedidoTienda.Columns.Add("idPedidoTienda", typeof(string));
  9.             PedidoTienda.Columns.Add("Pedido", typeof(int));
  10.             PedidoTienda.Columns.Add("IdentidadOrigenPedido", typeof(int));
  11.             PedidoTienda.Columns.Add("FechaPedido", typeof(DateTime));
  12.             PedidoTienda.Columns.Add("CodigoBarras", typeof(string));
  13.  
  14.  return PedidoTienda;
  15.         }
  16.  
  17.  
  18.  

Código: C#
  1.  
  2. CabPedido CPedido = new CabPedido();
  3.             XmlNodeList pedidostiendas =
  4.                 xDoc.GetElementsByTagName("PedidoTienda");//idtabla=122-->PedidosTiendas
  5.  
  6.  foreach (XmlElement nodo in pedidostiendas)
  7.             {
  8.  
  9.                 int i = 0;
  10.  
  11.                                 CPedido.idPedidoTienda = Convert.ToUInt32(nodo.GetElementsByTagName("IdPedidoTienda") [i].InnerText);
  12.                                if (CPedido.Pedido == null)
  13.                 {
  14.                     CPedido.Pedido = Convert.ToInt32(nodo.GetElementsByTagName("Pedido")[i].InnerText);//nodo xsi.nil
  15.                 }
  16.                
  17.                 CPedido.IdentidadOrigenPedido = Convert.ToInt32(nodo.GetElementsByTagName("IdEntidadOrigenPedido")[i].InnerText);
  18.                 CPedido.FechaPedido = Convert.ToDateTime(nodo.GetElementsByTagName("FechaPedido")[i].InnerText);
  19.                 CPedido.CodigoBarras = nodo.GetElementsByTagName("CodigoBarras")[i].InnerText;
  20.  
  21.  DataTable miTabla;
  22.                 miTabla = CreaTabla();
  23.  
  24.                 DataRow getpedido = miTabla.NewRow();//definicion del datarow del tipo DataTable(miTabla-->PedidoTienda)
  25.  
  26.                 getpedido["idPedidoTienda"] = Convert.ToUInt32(nodo.GetElementsByTagName("IdPedidoTienda")[i].InnerText);
  27.                 getpedido["Pedido"]=CPedido.Pedido ;
  28.                 getpedido["IdentidadOrigenPedido"]=CPedido.IdentidadOrigenPedido ;
  29.                 getpedido["FechaPedido"]=CPedido.FechaPedido ;
  30.                 getpedido["CodigoBarras"]=CPedido.CodigoBarras ;
  31.  
  32. miTabla.Rows.Add(getpedido);
  33.  
  34.  

Código: C#
  1.  
  2.  public class CabPedido //dentro el XML la primera tabla que
  3.                                //indica en este caso PEDIDOTIENDA
  4.         {
  5.             public long idPedidoTienda;
  6.             public int Pedido;
  7.             public int IdentidadOrigenPedido;
  8.             public DateTime FechaPedido;
  9.             public String CodigoBarras;
  10.                
  11.  
  12.  

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!!

+Onis

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #5 en: Viernes 1 de Julio de 2011, 09:30 »
0
Código: XML
  1.  
  2. <PedidoTienda>
  3.    
  4.   <IdPedidoTienda>100019019</IdPedidoTienda>
  5.   <Pedido xsi:nil="true" />
  6.   <IdEntidadOrigenPedido>19</IdEntidadOrigenPedido>
  7.   <FechaPedido>2011-04-01T18:14:09.86</FechaPedido>
  8.   <CodigoBarras>100019019</CodigoBarras>
  9.  
  10. </PedidoTienda>
  11.  
  12.  

Tanto este cachito de XML como el código anterior(de los anteriores msgs) está recortado, porque si tengo que poner todo el código no acabamos ni mañana xD

SALUDOS!

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #6 en: Viernes 1 de Julio de 2011, 15:30 »
0
Cita de: "+Onis"
Mi intencion es solo esa, recoger campos del XML e insertarlos
Código: C#
  1.  
  2. System.Collections.ArrayList ListaPedidos; // 1) Creo un objeto de tipo ArrayList.
  3.  //private DataTable CreaTabla()
  4.     //    {
  5.        //     DataTable PedidoTienda = new DataTable();
  6.          //   PedidoTienda.Clear();
  7.            
  8.            // PedidoTienda.Columns.Add("idPedidoTienda", typeof(string));
  9.            // PedidoTienda.Columns.Add("Pedido", typeof(int));
  10.             //PedidoTienda.Columns.Add("IdentidadOrigenPedido", typeof(int));
  11.             //PedidoTienda.Columns.Add("FechaPedido", typeof(DateTime));
  12.            // PedidoTienda.Columns.Add("CodigoBarras", typeof(string));
  13.  
  14. // return PedidoTienda;
  15.    //     }
  16.  
  17.  
  18.  

Código: C#
  1.  
  2. CabPedido CPedido = new CabPedido();
  3.             XmlNodeList pedidostiendas =
  4.                 xDoc.GetElementsByTagName("PedidoTienda");//idtabla=122-->PedidosTiendas
  5.  ListaPedidos = new System.Collections.ArrayList(); // 2) Hago una instancia de mi objeto
  6.  foreach (XmlElement nodo in pedidostiendas)
  7.             {
  8.  
  9.                 int i = 0;
  10.  
  11.                                 CPedido.idPedidoTienda = Convert.ToUInt32(nodo.GetElementsByTagName("IdPedidoTienda") [i].InnerText);
  12.                                if (CPedido.Pedido == null)
  13.                 {
  14.                     CPedido.Pedido = Convert.ToInt32(nodo.GetElementsByTagName("Pedido")[i].InnerText);//nodo xsi.nil
  15.                 }
  16.                
  17.                 CPedido.IdentidadOrigenPedido = Convert.ToInt32(nodo.GetElementsByTagName("IdEntidadOrigenPedido")[i].InnerText);
  18.                 CPedido.FechaPedido = Convert.ToDateTime(nodo.GetElementsByTagName("FechaPedido")[i].InnerText);
  19.                 CPedido.CodigoBarras = nodo.GetElementsByTagName("CodigoBarras")[i].InnerText;
  20.                  ListaPedidos.Add(CPedido); // 3) Agrego tu objeto CPedido a mi lista.
  21.                } //FIN FOREACH
  22. // DataTable miTabla;
  23.    //             miTabla = CreaTabla();
  24.  
  25.       //          DataRow getpedido = miTabla.NewRow();//definicion del datarow del tipo DataTable(miTabla-->PedidoTienda)
  26.  
  27.          //       getpedido["idPedidoTienda"] = Convert.ToUInt32(nodo.GetElementsByTagName("IdPedidoTienda")[i].InnerText);
  28.             //    getpedido["Pedido"]=CPedido.Pedido ;
  29.              //   getpedido["IdentidadOrigenPedido"]=CPedido.IdentidadOrigenPedido ;
  30.                // getpedido["FechaPedido"]=CPedido.FechaPedido ;
  31.                // getpedido["CodigoBarras"]=CPedido.CodigoBarras ;
  32.  
  33. //miTabla.Rows.Add(getpedido);
  34.  
  35.  



Con 3 lineas que agregue.. si te das cuenta elimine como 20 xD jajajaja.. no necesitas usar el DataTable... ahora tienes un objeto(ListaPedidos) de tipo ArrayList que puedes enviar a tu capa de datos (si es que estás usando Programación por Capas) y en tu capa de datos recorres el ArrayList de la siguiente manera:

Código: C#
  1.  
  2. foreach(CabPedido MiPedido in ListaPedidos)
  3. {
  4. //Tú código para INSERTS/UPDATE/DELETE aquí va.
  5. // espero te sirva. :D
  6. }
  7.  
  8.  



Bueno.. pues si tienes alguna duda.. solo pregunta.. saludos.. :)
@gabio87

+Onis

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #7 en: Jueves 7 de Julio de 2011, 09:07 »
0
Me fué genial!! muchissimas gracias!! :D pronto apareceré con otra duda jejeje

+Onis

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #8 en: Viernes 8 de Julio de 2011, 15:39 »
0
Directamente engancho todo el código que asi creo que nos evitaremos que os pierda... la cosa:
-como veis al inicio del codigo recojo 3 xmls diferentes...más adelante de cada uno de esos XML
recojo un campo(en realidad seran muchas de cada uno,,,pero mejor simplificarlo ya que no es lo importante)
y los meto en las variables de la estructura que le pertoque.

La parte que no entiendo, es como hago (en los foreach) para que pueda trabajar con las 3 variables, para realizar el insert
en la tabla de oracle,,,,,

Espero haberme explicado suficientemente bien. GRACIASSS!!!

Código: C#
  1.  
  2.  
  3. namespace prueba2
  4. {
  5.     public partial class Form1 : Form
  6.     {
  7.  
  8.  
  9.         public Form1()
  10.         {
  11.             InitializeComponent();
  12.         }
  13.         private static readonly string cnnStrTPV =
  14.             ConfigurationManager.ConnectionStrings["xTrelaTPVConnectionString"].ConnectionString;
  15.  
  16.         System.Data.OracleClient.OracleConnection conn =
  17.             new System.Data.OracleClient.OracleConnection();
  18.  
  19.  
  20.         int idtabla;
  21.         long Id;
  22.         string sql = "";
  23.  
  24.         //
  25.         System.Collections.ArrayList ListaPedidos =
  26.                new System.Collections.ArrayList();//definimos e instanciamos el objeto ArrayList
  27.         CabPedido CPedido = new CabPedido();
  28.  
  29.         System.Collections.ArrayList ListaTickets =
  30.                 new System.Collections.ArrayList();
  31.         CabTicket CTicket = new CabTicket();
  32.  
  33.         System.Collections.ArrayList ListaOperacionesT =
  34.                 new System.Collections.ArrayList();
  35.         CabOperac COperac = new CabOperac();
  36.  
  37.  
  38.         //Código encargado de realizar la conexion con la BBDD
  39.         //y de llamar al método que realiza la recogida del XML del campo de la bbdd
  40.         //y de crear el archivo xml en la ruta especificada
  41.  
  42.  
  43.         private void RecogerXML()
  44.         {
  45.  
  46.             XmlDocument doc1 = new XmlDocument();
  47.             XmlDocument doc2 = new XmlDocument();
  48.             XmlDocument doc3 = new XmlDocument();
  49.  
  50.             SqlConnection cnn = new SqlConnection(cnnStrTPV);
  51.  
  52.             cnn.Open();
  53.  
  54.             LoadXml1(cnn, doc1);
  55.             LoadXml2(cnn, doc2);
  56.             LoadXml3(cnn, doc3);
  57.  
  58.             cnn.Close();
  59.  
  60.             doc1.Save("C:\Users\davidms\Desktop\temp\OutputXml1.xml");
  61.             doc2.Save("C:\Users\davidms\Desktop\temp\OutputXml2.xml");
  62.             doc3.Save("C:\Users\davidms\Desktop\temp\OutputXml3.xml");
  63.  
  64.             MessageBox.Show("Archivo XML importado y creado correctamente", "Info",
  65.                 MessageBoxButtons.OK, MessageBoxIcon.Information);
  66.  
  67.         }
  68.      
  69.        
  70.  
  71.         //Método que recoge el campo xml de la bbdd
  72.         protected bool LoadXml1(SqlConnection cnn, XmlDocument doc1)
  73.         {
  74.             //Leemos el campo serialización(XML) de la bbdd.
  75.  
  76.  
  77.             idtabla = 122;//pedidostiendas
  78.             Id = 10001901982;
  79.  
  80.             sql = @"SELECT Serializacion
  81.                    FROM xTrelaTPV..OPERACIONES
  82.                    WHERE IdOperacion =" + Id +
  83.                    "and idtabla=" + idtabla + "";
  84.  
  85.  
  86.  
  87.             SqlCommand cm = new SqlCommand(sql, cnn);
  88.             /* cm.Parameters.Add(new SqlParameter("@IdOperacion", 10001901982));//id de ejemplo
  89.                  //10009801627));
  90.              //cm.Parameters.Add(new SqlParameter("@Idtabla", 122));//Idtabla PedidosTiendas
  91.                  //127));//id tabla OperacionesTalleresHistorico*/
  92.             using (SqlDataReader dr = cm.ExecuteReader())
  93.             {
  94.                 if (dr.Read())
  95.                 {
  96.                     SqlXml MiXml = dr.GetSqlXml(dr.GetOrdinal("Serializacion"));
  97.                     doc1.LoadXml(MiXml.Value);
  98.                     return true;
  99.                 }
  100.                 else
  101.                 {
  102.                     return false;
  103.                 }
  104.             }
  105.         }
  106.  
  107.         protected bool LoadXml2(SqlConnection cnn, XmlDocument doc2)
  108.         {
  109.  
  110.             idtabla = 127;//OperacionesTalleresHistorico
  111.             Id = 1001520165;
  112.  
  113.             sql = @"SELECT Serializacion
  114.                    FROM xTrelaTPV..OPERACIONES
  115.                    WHERE IdOperacion =" + Id +
  116.                    "and idtabla=" + idtabla + "";
  117.  
  118.  
  119.  
  120.             SqlCommand cm = new SqlCommand(sql, cnn);
  121.            
  122.             using (SqlDataReader dr = cm.ExecuteReader())
  123.             {
  124.                 if (dr.Read())
  125.                 {
  126.                     SqlXml MiXml = dr.GetSqlXml(dr.GetOrdinal("Serializacion"));
  127.                     doc2.LoadXml(MiXml.Value);
  128.                     return true;
  129.                 }
  130.                 else
  131.                 {
  132.                     return false;
  133.                 }
  134.             }
  135.         }
  136.  
  137.         protected bool LoadXml3(SqlConnection cnn, XmlDocument doc3)
  138.         {
  139.             //Leemos el campo serialización(XML) de la bbdd.
  140.  
  141.  
  142.  
  143.             idtabla = 135;//tickets
  144.             Id = 100098011891;
  145.  
  146.             sql = @"SELECT Serializacion
  147.                    FROM xTrelaTPV..OPERACIONES
  148.                    WHERE IdOperacion =" + Id +
  149.                    "and idtabla=" + idtabla + "";
  150.  
  151.  
  152.             SqlCommand cm = new SqlCommand(sql, cnn);
  153.            
  154.             using (SqlDataReader dr = cm.ExecuteReader())
  155.             {
  156.                 if (dr.Read())
  157.                 {
  158.                     SqlXml MiXml = dr.GetSqlXml(dr.GetOrdinal("Serializacion"));
  159.                     doc3.LoadXml(MiXml.Value);
  160.                     return true;
  161.                 }
  162.                 else
  163.                 {
  164.                     return false;
  165.                 }
  166.             }
  167.         }
  168.  
  169.         //Método encargado de sacar los campos del xml
  170.         //moviendose por los diferentes nodos del archivo
  171.         public void GetCampos_PedidoTienda()
  172.         {
  173.             XmlDocument xDoc = new XmlDocument();//XmlDocument nos permite editar el XML
  174.             //La ruta del documento XML permite rutas relativas
  175.             //respeto del ejecutable!
  176.  
  177.             xDoc.Load("C:/Users/davidms/Desktop/temp/OutputXml1.xml");//ruta del archivo xml
  178.  
  179.             XmlNodeList pedidostiendas =
  180.                 xDoc.GetElementsByTagName("PedidoTienda");//idtabla=122-->PedidosTiendas
  181.  
  182.  
  183.             foreach (XmlElement nodo in pedidostiendas)
  184.             {
  185.  
  186.                 int i = 0;
  187.  
  188.  
  189.                 CPedido.idPedidoTienda = Convert.ToUInt32(nodo.GetElementsByTagName("IdPedidoTienda")[i].InnerText);
  190.  
  191.                 if (CPedido.Pedido == null)
  192.                 {
  193.                     CPedido.Pedido = Convert.ToInt32(nodo.GetElementsByTagName("Pedido")[i].InnerText);//nodo xsi.nil
  194.                 }
  195.  
  196.                 CPedido.IdentidadOrigenPedido = Convert.ToInt32(nodo.GetElementsByTagName("IdEntidadOrigenPedido")[i].InnerText);
  197.                 CPedido.FechaPedido = (nodo.GetElementsByTagName("FechaPedido")[i].InnerText);
  198.                 CPedido.CodigoBarras = nodo.GetElementsByTagName("CodigoBarras")[i].InnerText;
  199.                 CPedido.IdDivisa = Convert.ToInt32(nodo.GetElementsByTagName("IdDivisa")[i].InnerText);
  200.                 CPedido.AvisarALaRecepcion = Convert.ToBoolean(nodo.GetElementsByTagName("AvisarAlaRecepcion")[i].InnerText);
  201.                 CPedido.SMS = Convert.ToBoolean(nodo.GetElementsByTagName("Sms")[i].InnerText);
  202.                 CPedido.AvisarALaRecepcionCompletaDelPedido = Convert.ToBoolean(nodo.GetElementsByTagName("AvisarAlaRecepcionCompletaDelPedido")[i].InnerText);
  203.                
  204.                 //Agrego la estructura o objeto CPedido a mi ArrayList
  205.                 ListaPedidos.Add(CPedido);
  206.                 //    
  207.  
  208.             }
  209.         }
  210.  
  211.         public void GetCampos_Ticket()
  212.         {
  213.             XmlDocument xDoc = new XmlDocument();//XmlDocument nos permite editar el XML
  214.             //La ruta del documento XML permite rutas relativas
  215.             //respeto del ejecutable!
  216.  
  217.             xDoc.Load("C:/Users/davidms/Desktop/temp/OutputXml2.xml");//ruta del archivo xml
  218.  
  219.             XmlNodeList Ptickets =
  220.                 xDoc.GetElementsByTagName("Ticket");//idtabla=135-->Tickets
  221.  
  222.  
  223.             foreach (XmlElement nodo in Ptickets)
  224.             {
  225.  
  226.                 int i = 0;
  227.  
  228.  
  229.                 //CTicket.IdEntidad  =Convert.ToInt32(nodo.GetElementsByTagName("IdEntidad")[i].InnerText);
  230.                 CTicket.CodigoBarras = (nodo.GetElementsByTagName("CodigoBarras")[i].InnerText);
  231.                 CTicket.NumeroTicket = Convert.ToInt32(nodo.GetElementsByTagName("NumeroTicket")[i].InnerText);
  232.                 CTicket.Fecha = (nodo.GetElementsByTagName("Fecha")[i].InnerText);//tabla de pruebas-> DATE ,,cambiado a VARCHAR
  233.  
  234.                 ListaTickets.Add(CTicket);
  235.  
  236.             }
  237.         }
  238.  
  239.  
  240.         public void GetCampos_OperacTaller()
  241.         {
  242.             XmlDocument xDoc = new XmlDocument();//XmlDocument nos permite editar el XML
  243.             //La ruta del documento XML permite rutas relativas
  244.             //respeto del ejecutable!
  245.  
  246.             xDoc.Load("C:/Users/davidms/Desktop/temp/OutputXml3.xml");//ruta del archivo xml
  247.  
  248.             XmlNodeList operaciontallerH =
  249.                 xDoc.GetElementsByTagName("OperacionTallerHistorico");//idtabla=127-->OperacionTallerHist
  250.  
  251.  
  252.  
  253.             foreach (XmlElement nodo in operaciontallerH)
  254.             {
  255.  
  256.                 int i = 0;
  257.  
  258.                 COperac.IdOperacionTaller = Convert.ToUInt32(nodo.GetElementsByTagName("IdOperacionTaller")[i].InnerText);
  259.                 COperac.DescripcionGeneradaReparacion = nodo.GetElementsByTagName("DescripcionGeneradaReparacion")[i].InnerText;
  260.                 COperac.FechaOperacionTaller = nodo.GetElementsByTagName("FechaOperacionTaller")[i].InnerText;
  261.  
  262.                 ListaOperacionesT.Add(COperac);
  263.  
  264.             }
  265.         }
  266.  
  267.  
  268.         public void InsertOracle()
  269.         {
  270.  
  271.             // TODO: Modify the connection string and include any
  272.             // additional required properties for your database.
  273.             conn.ConnectionString =
  274.                 "Data Source=DEVELOP_ORASRVDEV03;" + //schema bbdd
  275.                 "User ID=xxxxx;" +                   //usuario
  276.                 "Password=xxxxxxxxx";    //password
  277.  
  278.             conn.Open();//--abrimos conexion
  279.  
  280.  
  281.             //Declaro una variable de tipo command del oracle
  282.             System.Data.OracleClient.OracleCommand MiComando = new System.Data.OracleClient.OracleCommand();
  283.  
  284.  
  285.             foreach (CabPedido MiPedido in ListaPedidos)
  286.             {
  287.                 foreach (CabTicket MiTicket in ListaTickets)
  288.                 {
  289.                     foreach (CabOperac MiOperacion in ListaOperacionesT)
  290.                     {
  291.                         System.Data.OracleClient.OracleParameter var1;
  292.                         System.Data.OracleClient.OracleParameter var2;
  293.                         System.Data.OracleClient.OracleParameter var3;
  294.  
  295.                         var1 = new System.Data.OracleClient.OracleParameter();
  296.                         var2 = new System.Data.OracleClient.OracleParameter();
  297.                         var3 = new System.Data.OracleClient.OracleParameter();
  298.  
  299.                         var1.OracleType = System.Data.OracleClient.OracleType.Int32;
  300.                         var2.OracleType = System.Data.OracleClient.OracleType.VarChar;
  301.                         var3.OracleType = System.Data.OracleClient.OracleType.VarChar;
  302.  
  303.                         var1.Value = CPedido.idPedidoTienda;
  304.                         var2.Value = CTicket.CodigoBarras;
  305.                         var3.Value = COperac.FechaOperacionTaller;
  306.  
  307.                         MiComando.Parameters.Clear();
  308.  
  309.                         try
  310.                         {
  311.  
  312.                             string oracle = "Insert into TO_PRUEBAS" +
  313.                                             "(IDPEDIDO,CODIGOBARRAS,FECHA)" +
  314.                                             "values('" + var2.Value + "'," + var1.Value + ",'" +
  315.                                             (Convert.ToDateTime(var3.Value)) + "')";
  316.  
  317.  
  318.                             MiComando = new OracleCommand(oracle, conn);
  319.                             MiComando.ExecuteNonQuery();
  320.                             MessageBox.Show("Ejecución realizada con éxito", "INFO",
  321.                                 MessageBoxButtons.OK, MessageBoxIcon.Information);
  322.  
  323.                         }
  324.                         catch (Exception err)
  325.                         {
  326.                             MessageBox.Show("Error..." + err.Message, "ERROR",
  327.                                 MessageBoxButtons.OK, MessageBoxIcon.Error);
  328.  
  329.                         }
  330.                         conn.Close();//--cerramos conexión
  331.  
  332.  
  333.                         File.Delete("C:/Users/davidms/Desktop/temp/OutputXml1.xml");
  334.                         File.Delete("C:/Users/davidms/Desktop/temp/OutputXml2.xml");
  335.                         File.Delete("C:/Users/davidms/Desktop/temp/OutputXml3.xml");
  336.                     }
  337.                 }
  338.             }
  339.  
  340.         }
  341.  
  342.  
  343.         public class CabPedido //dentro el XML la primera tabla que
  344.                             //indica en este caso PEDIDOTIENDA
  345.         {
  346.             public long idPedidoTienda;
  347.             public int Pedido;
  348.             public int IdentidadOrigenPedido;
  349.             public string FechaPedido;//si lo pones a String y en el momento del Insert lo conviertes a date,,,mejor
  350.             public string CodigoBarras;
  351.             public int IdDivisa;  //tinyint
  352.             public bool AvisarALaRecepcion; //bit --> bool¿?
  353.             public bool SMS; //bit
  354.             public bool AvisarALaRecepcionCompletaDelPedido; //bit
  355.             public int IdCaja; //tinyint
  356.             public long IdTicket; //bigint
  357.             public int Comodin1;
  358.             public int Comodin2;
  359.             public int Comodin3;
  360.             public int Comodin4;
  361.             public bool Comodin5; //bit
  362.             public bool Comodin6; //bit
  363.             public string Comodin7; //nvarchar(10)
  364.             public string Comodin8; //nvarchar(100)
  365.             public DateTime Comodin9;
  366.             public DateTime Comodin10;
  367.             public long IdEmpleado; //bigint
  368.             public int IdEntidadDestinoPedido;
  369.             public long Comodin11; //bigint
  370.             public long Comodin12; //bigint
  371.             public int Comodin13; //money
  372.             public int Comodin14; //money
  373.             public bool Comodin15; //bit
  374.             public bool Comodin16; //bit
  375.             public DateTime Comodin17;
  376.             public DateTime Comodin18;
  377.             public string Comodin19;// nvarchar(300)
  378.             //public string Comodin20 //xml
  379.             public int Categoria1;
  380.             public int Categoria2;
  381.             public int Categoria3;
  382.             public int Categoria4;
  383.             public int Categoria5;
  384.  
  385.         }
  386.  
  387.         public class CabTicket//XML Tickets
  388.         {
  389.             public long IdTicket;//bigint
  390.             public int IdEntidad;
  391.             public int IdCaja;//tinyint
  392.             public int NumeroTicket;
  393.             public string Fecha;//DateTime
  394.             public int IdTipoTicket;
  395.             public int IdCajaSesion;
  396.             public long IdEmpleado;//bigint
  397.             public decimal PorcentajeDescuentoGlobal;//numeric(6,3)
  398.             public int ImporteDescuentoGlobal;//money
  399.             public bool emitido;//bit
  400.             public int IdEstadoTicket;
  401.             public string CodigoBarras;
  402.             public long IdTicketEnlace;
  403.             public int Comodin1;
  404.             public int Comodin2;
  405.             public int Comodin3;
  406.             public int Comodin4; //money
  407.             public bool Comodin5; //bit
  408.             public bool Comodin6; //bit
  409.             public string Comodin7; //nvarchar(10)
  410.             public string Comodin8; //nvarchar(100)
  411.             public DateTime Comodin9;
  412.             public DateTime Comodin10;
  413.             public long Comodin11; //bigint
  414.             public long Comodin12; //bigint
  415.             public int Comodin13; //money
  416.             public int Comodin14; //money
  417.             public bool Comodin15; //bit
  418.             public bool Comodin16; //bit
  419.             public DateTime Comodin17;
  420.             public DateTime Comodin18;
  421.             public string Comodin19;// nvarchar(300)
  422.             //public string Comodin20 //xml
  423.             //en la tabla hay 4 campos más, que no creo pinten nada..
  424.  
  425.  
  426.         }
  427.  
  428.         public class CabOperac //XML OperacionesTalleresHistorico
  429.         {
  430.             public long IdOperacionTallerHistorico;//bigint
  431.             public long IdOperacionTaller;//bigint
  432.             public string FechaOperacionTaller;//DATETIME
  433.             public string DescripcionGeneradaReparacion;
  434.             public bool SolicitarPresupuesto;//bit
  435.             public bool ViajaPieza;//bit
  436.             public int PresupuestoOperacionTaller;//money
  437.             public bool PresupuestoAceptadoPorCliente;//bit
  438.             public bool PresupuestoModificadoPorCentral;//bit
  439.             public bool PresupuestoModificadoPorTienda;//bit
  440.             public bool InformadoCliente;
  441.  
  442.         }
  443.  
  444.  
  445.         private void button1_Click(object sender, EventArgs e)
  446.         {
  447.             RecogerXML();
  448.         }
  449.  
  450.         private void button2_Click(object sender, EventArgs e)
  451.         {
  452.             GetCampos_PedidoTienda();
  453.             GetCampos_Ticket();
  454.             GetCampos_OperacTaller();
  455.  
  456.             InsertOracle();
  457.         }
  458.  
  459.         private void button3_Click(object sender, EventArgs e)
  460.         {
  461.             this.Close();
  462.         }
  463.     }
  464.  
  465. }
  466.  
  467.  
  468.  
  469.  

+Onis

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #9 en: Miércoles 13 de Julio de 2011, 09:46 »
0
no hay respuesta? :(

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #10 en: Miércoles 13 de Julio de 2011, 22:19 »
0
Si hay, sólo que ando algo ocupado en mi trabajo casi no he entrado y ahorita no puedo leer todo el código.. disculpa, apenas tenga tiempo trataré de hecharle un ojo.. saludos..

nota: lee acerca de foreach y de los foreach anidados probablemente por ahí este tu solución..
@gabio87

+Onis

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: recoger campos y valores de un XML y pasarlo a un datatable
« Respuesta #11 en: Jueves 14 de Julio de 2011, 09:20 »
0
Hola! perdona no pretendia dar prisa, primero las cosas de cada uno, no hay problema ;)

pues he hecho un arreglo, en vez de tener 3 estructuras, he creado 1 total que engloba las tres y asi me ahorro poner tres foreach con uno voy tirando,,,quiza es una manera menos ortodoxa, pero m sirve igual.

Si quieres aportar mejjores maneras de hacerlo, encantado de aprender  ;)

Muchas Gracias!