martes, 26 de noviembre de 2019

C# - Convertir un Datatable en un XML, con tags ingresador por el programador

Lo que se busca:
<DiarioContabilidad>
  <Diario>
    <NroDiario>0              </NroDiario>
    <Nombre>ITFZLEASOFT    </Nombre>
    <DefContable>Recaudación Caja</DefContable>
    <Lineas>
      <Fecha>23/09/2019</Fecha>
      <Asiento>15026</Asiento>
      <Empresa>ECLE</Empresa>
      <TipoCuenta>Contabilidad</TipoCuenta>
      <Cuenta>110311031002</Cuenta>
      <Descripcion>Pago Cuota 8</Descripcion>
      <CentroCosto>016</CentroCosto>
      <RutCliente>76092069-K </RutCliente>
      <Debito>0,00</Debito>
      <Credito>810767,00</Credito>
      <Divisa>CLP</Divisa>
      <TipoCambio>0</TipoCambio>
      <Documento>0</Documento>
      <TransBancaria>000</TransBancaria>
      <ReferenciaPago>0</ReferenciaPago>
    </Lineas>
    <Lineas>
      <Fecha>23/09/2019</Fecha>
      <Asiento>15026</Asiento>
      <Empresa>ECLE</Empresa>
      <TipoCuenta>Contabilidad</TipoCuenta>
      <Cuenta>110311031002</Cuenta>
      <Descripcion>Pago Cuota 16</Descripcion>
      <CentroCosto>016</CentroCosto>
      <RutCliente>76092069-K </RutCliente>
      <Debito>0,00</Debito>
      <Credito>792988,00</Credito>
      <Divisa>CLP</Divisa>
      <TipoCambio>0</TipoCambio>
      <Documento>0</Documento>
      <TransBancaria>000</TransBancaria>
      <ReferenciaPago>0</ReferenciaPago>
    </Lineas>
   </Diario>
</DiarioContabilidad>



Un sp devuelve la data, en un dataTable, como se consigue:

   public XDocument CreateXmlContabilidad(DataTable dt)
        {
            try
            {
                XDocument voucher = new XDocument(new XDeclaration("1.0", "utf-8", "true"),
                    new XElement("DiarioContabilidad",
                        from cabecera in dt.AsEnumerable()
                        select
                            new XElement("Diario",
                                new XElement("NroDiario", cabecera["Num_lote"]),
                                new XElement("Nombre", cabecera["Nombre_lote"]),
                                new XElement("DefContable", cabecera["Desc_Comprobante"]),
                                from detalle in dt.AsEnumerable()
                                select
                                    new XElement("Lineas",
                                        new XElement("Fecha", detalle["Fecha_Comp"]),
                                        new XElement("Asiento", detalle["Num_Comp"]),
                                        new XElement("Empresa", detalle["Empresa"]),
                                        new XElement("TipoCuenta", detalle["Tipo_Cuenta"]),
                                        new XElement("Cuenta", detalle["Cod_Cuenta_LS"]),
                                        new XElement("Descripcion", detalle["Glosa_Lin_Comp"]),
                                        new XElement("CentroCosto", detalle["Dim_Finan1"]),
                                        new XElement("RutCliente", detalle["Dim_Finan_Rut"]),
                                        new XElement("Debito", detalle["Mto_debe_pesos"]),
                                        new XElement("Credito", detalle["Mto_Haber_pesos"]),
                                        new XElement("Divisa", detalle["Divisa"]),
                                        new XElement("TipoCambio", detalle["Tipo_Cambio"]),
                                        new XElement("Documento", detalle["Nro_Docto"]),
                                        new XElement("TransBancaria", detalle["Tipo_Tr_Bco"]),
                                        new XElement("ReferenciaPago", detalle["Ref_Pago"])))));
                return voucher;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }




fuente: https://www.c-sharpcorner.com/blogs/convert-datatable-to-xml-string-using-linq1