Foros del Web » Programando para Internet » ASPX (.net) »

leer xml a datatable

Estas en el tema de leer xml a datatable en el foro de ASPX (.net) en Foros del Web. trengo que subir un fichero xml y guardar los registros en un datatable pero el readxml me devuelve 0 filas.... este es mi xml Código: ...
  #1 (permalink)  
Antiguo 19/01/2015, 04:26
Avatar de izar  
Fecha de Ingreso: enero-2004
Mensajes: 519
Antigüedad: 20 años, 2 meses
Puntos: 1
leer xml a datatable

trengo que subir un fichero xml y guardar los registros en un datatable

pero el readxml me devuelve 0 filas....

este es mi xml

Código:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2015-01-16T14:08:37">
<Record>
    <IDENTIFICACION />
    <COMARCAEUSTAT>9</COMARCAEUSTAT>
    <COMARCADIPU />
    <OBSERVACIONES1 />
    <NOMORGANIZACION>ASOCIACION DE TIEMPO LIBRE HAZI TALDEA-SANTA CLARA</NOMORGANIZACION>
    <CIF />
    <FIGURAJURIDICA>1</FIGURAJURIDICA>
    <FUENTEREGISTROOFICIAL>1</FUENTEREGISTROOFICIAL>
    <NUMREGISTRO>AS/A/18168/2014</NUMREGISTRO>
    <DIRECCION>Av. Mediterraneo, 37 (Parroquia) 01015 Vitoria-Gasteiz</DIRECCION>
    <CP />
    <MUNICIPIO>158</MUNICIPIO>
    <PROVINCIA>3</PROVINCIA>
    <TELEFONO1 />
    <TELEFONO2 />
    <FAX />
    <EMAILORG />
    <WEB />
    <PERSONACONTACTO />
    <EMAILPERSONACONTACTO />
    <INFORPARACLASIFICAR>Cultura GeneralTiempo Libre</INFORPARACLASIFICAR>
    <AMACTUACIONTS>7</AMACTUACIONTS>
    <ARTISTICOCULTURAL>False</ARTISTICOCULTURAL>
    <MASDE1MILLON>False</MASDE1MILLON>
    <CRITERIO2>3</CRITERIO2>
    <OBJETOTS>1</OBJETOTS>
    <OBJETOTSS>1</OBJETOTSS>
    <EMPRESAINSERCION>False</EMPRESAINSERCION>
    <CENTROESPECIALEMPLEO>False</CENTROESPECIALEMPLEO>
    <FECHACONSTITUCION>2014</FECHACONSTITUCION>
    <NIVEL>2</NIVEL>
    <TIPOINICIATIVA />
    <AMGEOGRAFACT />
    <AMACTUACIONTSS>4</AMACTUACIONTSS>
    <CONTINGENCIA>6</CONTINGENCIA>
    <COLECTIVO>3</COLECTIVO>
    <PERSONASUSUARIAS />
    <PERSONASVOLUNTARIAS />
    <PERSONASREMUNERADAS />
    <VOLUMENINGRESOS />
    <FECHAULTIMAENCUESTA />
    <ANOSENCUESTA />
    <CONTACTADADIRECT>False</CONTACTADADIRECT>
    <FECHAULTIMOCONTACTO />
    <ENVIOENCUESTA>True</ENVIOENCUESTA>
    <OBSERVACIONES2 />
  </Record>
  </dataroot>
y este mi codigo


Código:
 Dim dtexcelSubido As New DataTable
 dtexcelSubido = ReadXML(Server.MapPath(FolderPath + Session("mifichero")))



Public Function ReadXML(ByVal file As String) As DataTable
        'create the DataTable that will hold the data
        Dim table As New DataTable("XmlData")
        Try
           

            'open the file using a Stream
            Using stream As Stream = New FileStream(file, FileMode.Open, FileAccess.Read)
                'create the table with the appropriate column names
                table.Columns.Add("IDENTIFICACION", GetType(Integer))
                table.Columns.Add("COMARCAEUSTAT", GetType(Integer))
                table.Columns.Add("COMARCADIPU", GetType(Integer))
                table.Columns.Add("OBSERVACIONES1", GetType(String))

                table.Columns.Add("NOMORGANIZACION", GetType(String))
                table.Columns.Add("CIF", GetType(String))

                table.Columns.Add("FIGURAJURIDICA", GetType(Integer))
                table.Columns.Add("FUENTEREGISTROOFICIAL", GetType(Integer))

                table.Columns.Add("NUMREGISTRO", GetType(String))
                table.Columns.Add("DIRECCION", GetType(String))

                table.Columns.Add("CP", GetType(Integer))
                table.Columns.Add("MUNICIPIO", GetType(Integer))
                table.Columns.Add("PROVINCIA", GetType(Integer))

                table.Columns.Add("TELEFONO1", GetType(String))
                table.Columns.Add("TELEFONO2", GetType(String))

                table.Columns.Add("FAX", GetType(String))
                table.Columns.Add("EMAILORG", GetType(String))

                table.Columns.Add("WEB", GetType(String))
                table.Columns.Add("PERSONACONTACTO", GetType(String))

                table.Columns.Add("EMAILPERSONACONTACTO", GetType(String))
                table.Columns.Add("INFORPARACLASIFICAR", GetType(String))

                table.Columns.Add("AMACTUACIONTS", GetType(Integer))

                table.Columns.Add("ARTISTICOCULTURAL", GetType(Boolean))
                table.Columns.Add("MASDE1MILLON", GetType(Boolean))


                table.Columns.Add("CRITERIO2", GetType(Integer))
                table.Columns.Add("OBJETOTS", GetType(Integer))
                table.Columns.Add("OBJETOTSS", GetType(Integer))


                table.Columns.Add("EMPRESAINSERCION", GetType(Boolean))
                table.Columns.Add("CENTROESPECIALEMPLEO", GetType(Boolean))


                table.Columns.Add("FECHACONSTITUCION", GetType(Integer))
                table.Columns.Add("NIVEL", GetType(Integer))
                table.Columns.Add("TIPOINICIATIVA", GetType(Integer))
                table.Columns.Add("AMGEOGRAFACT", GetType(Integer))
                table.Columns.Add("AMACTUACIONTSS", GetType(Integer))
                table.Columns.Add("CONTINGENCIA", GetType(Integer))
                table.Columns.Add("COLECTIVO", GetType(Integer))


                table.Columns.Add("PERSONASUSUARIAS", GetType(String))
                table.Columns.Add("PERSONASVOLUNTARIAS", GetType(String))
                table.Columns.Add("PERSONASREMUNERADAS", GetType(String))
                table.Columns.Add("VOLUMENINGRESOS", GetType(String))
                table.Columns.Add("FECHAULTIMAENCUESTA", GetType(String))
                table.Columns.Add("ANOSENCUESTA", GetType(String))

                table.Columns.Add("CONTACTADADIRECT", GetType(Boolean))
                table.Columns.Add("FECHAULTIMOCONTACTO", GetType(DateTime))
                table.Columns.Add("ENVIOENCUESTA", GetType(Boolean))
                table.Columns.Add("OBSERVACIONES2", GetType(String))



                'use ReadXml to read the XML stream
                table.ReadXml(Stream)

                'return the results
                Return table
            End Using
        Catch ex As Exception
            Return table
        End Try
    End Function
lel datatable siempre me recupera 0 registros....
  #2 (permalink)  
Antiguo 19/01/2015, 06:52
Avatar de izar  
Fecha de Ingreso: enero-2004
Mensajes: 519
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: leer xml a datatable

He conseguido cargar el datase con el xml cuando no hay valores, nulos. Pero si hay valores nulos en el XML (por ejemplo IDENTIFICACION etc en el ejeplo inferior), me salta el error, en la sentencia readxml:

"La cadena de entrada no tiene el formato correcto."

Código:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2015-01-16T14:08:37">
<Record>
    <IDENTIFICACION />
    <COMARCAEUSTAT>9</COMARCAEUSTAT>
    <COMARCADIPU />
    <OBSERVACIONES1 />
    <NOMORGANIZACION>ASOCIACION DE TIEMPO LIBRE HAZI TALDEA-SANTA CLARA</NOMORGANIZACION>
    <CIF />
    <FIGURAJURIDICA>1</FIGURAJURIDICA>
    <FUENTEREGISTROOFICIAL>1</FUENTEREGISTROOFICIAL>
    <NUMREGISTRO>AS/A/18168/2014</NUMREGISTRO>
    <DIRECCION>Av. Mediterraneo, 37 (Parroquia) 01015 Vitoria-Gasteiz</DIRECCION>
    <CP />
    <MUNICIPIO>158</MUNICIPIO>
    <PROVINCIA>3</PROVINCIA>
    <TELEFONO1 />
    <TELEFONO2 />
    <FAX />
    <EMAILORG />
    <WEB />
    <PERSONACONTACTO />
    <EMAILPERSONACONTACTO />
    <INFORPARACLASIFICAR>Cultura GeneralTiempo Libre</INFORPARACLASIFICAR>
    <AMACTUACIONTS>7</AMACTUACIONTS>
    <ARTISTICOCULTURAL>False</ARTISTICOCULTURAL>
    <MASDE1MILLON>False</MASDE1MILLON>
    <CRITERIO2>3</CRITERIO2>
    <OBJETOTS>1</OBJETOTS>
    <OBJETOTSS>1</OBJETOTSS>
    <EMPRESAINSERCION>False</EMPRESAINSERCION>
    <CENTROESPECIALEMPLEO>False</CENTROESPECIALEMPLEO>
    <FECHACONSTITUCION>2014</FECHACONSTITUCION>
    <NIVEL>2</NIVEL>
    <TIPOINICIATIVA />
    <AMGEOGRAFACT />
    <AMACTUACIONTSS>4</AMACTUACIONTSS>
    <CONTINGENCIA>6</CONTINGENCIA>
    <COLECTIVO>3</COLECTIVO>
    <PERSONASUSUARIAS />
    <PERSONASVOLUNTARIAS />
    <PERSONASREMUNERADAS />
    <VOLUMENINGRESOS />
    <FECHAULTIMAENCUESTA />
    <ANOSENCUESTA />
    <CONTACTADADIRECT>False</CONTACTADADIRECT>
    <FECHAULTIMOCONTACTO />
    <ENVIOENCUESTA>True</ENVIOENCUESTA>
    <OBSERVACIONES2 />
  </Record>
  </dataroot>
  #3 (permalink)  
Antiguo 20/01/2015, 00:53
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 21 años, 5 meses
Puntos: 37
Respuesta: leer xml a datatable

Yo leo los xml's de facturas electronicas asi:

ASegurate que tu XML este grabado como UTF-8, esto lo puedes verificar abriendo el .xml con notepad y darle "guardar como" y hasta abajo en un combo box de formato debe decir "UTF-8" (independientemente de la etiqueta UTF-8 que esta contenida en el texto)



Dim doc As New System.Xml.XmlDocument
Try
doc.Load(nombreArchivoDestino)
'//Obtenemos el nodo raiz del documento.
Dim comprobante As XmlElement = doc.DocumentElement

' Oct 2013
' Revisamos si es un CFD o un CFDI
Dim tipoDeCFD As String = ""
Dim prefijo As String = ""
If comprobante.Attributes.GetNamedItem("version").Val ue() = "3.2" Then
tipoDeCFD = "CFDI"
prefijo = "cfdi:"
End If
If comprobante.Attributes.GetNamedItem("version").Val ue() = "2.2" Then
tipoDeCFD = "CFD"
End If
If comprobante.Attributes.GetNamedItem("version").Val ue() = "2.0" Then
tipoDeCFD = "CFD"
End If


'Dim fechaCFDI As String = comprobante.Attributes.GetNamedItem("fecha").Value ()
' Convertimos la fecha al formato que pide el campo
' La fecha NO SE TOMARA EN CUENTA, se agrega con fecha actual
'If fechaCFDI <> "" Then '2014-11-06T17:24:36
' fechaCFDI = fechaCFDI.Substring(0, 10)
' Dim arrTMPFechaCFDI As String() = fechaCFDI.Split("-")
' If arrTMPFechaCFDI.Length > 2 Then
' fechaCFDI = arrTMPFechaCFDI(2) & "/" & arrTMPFechaCFDI(1) & "/" & arrTMPFechaCFDI(0) ' dd/mm/aaaa
' txtFecha.Text = fechaCFDI
' txtFecha.BackColor = Drawing.Color.Yellow
' End If
'End If
'------------------------------------------------
' Recuperamos datos de emisor y los conceptos
'------------------------------------------------

Dim nodoEmisor As XmlNode = comprobante.Item("cfdi:Emisor")

'nodoTimbre = nodoEmisor.Item("tfd:TimbreFiscalDigital")
Dim emisorNombre As String = nodoEmisor.Attributes.GetNamedItem("nombre").Value ()
If emisorNombre <> "" Then
txtNombre.Text = emisorNombre
txtNombre.BackColor = Drawing.Color.Yellow
End If

Etiquetas: datatable, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:48.