Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Leer XML

76 views
Skip to first unread message

Daniel G. Samborski

unread,
Jan 11, 2006, 5:58:45 PM1/11/06
to
Hola, luego de mucho buscar encontré dos codigos, segun dicen, los mas
rapidos para leer un XML grande (12800 registros aprox) y guardarlos en una
base de datos SQL.

Pero tengo un problema, en algunos XML me da un error en una fila
determinada y con otro XML anda perfecto.
Seria posible que trate de leer algun null, es que el XML lo creo a partir
de una tabla ya existente.
Esta tabla la debo pasar a otra maquina que esta muy lejos, la debo enviar
por correo.

Aqui les pongo un ejemplo del XML que tengo y de dos codigos para leerlos. Y
el error que cada uno da.

XML

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Table>
<CodCli>66</CodCli>
<NroDoc>10068746</NroDoc>
<ApellNomb>FERREYRA JOAQUIN</ApellNomb>
<Calle>ANCHORENA 2122</Calle>
<NombLoc>Rosario</NombLoc>
</Table>
<Table>
<CodCli>67</CodCli>
<NroDoc>2819773</NroDoc>
<ApellNomb>ZZ GARCIA IRMA</ApellNomb>
<Calle>PUBLICA 2 6354 DB</Calle>
<NombLoc>Rosario</NombLoc>
</Table>
<Table>
<CodCli>68</CodCli>
<NroDoc>21821573</NroDoc>
<ApellNomb>ZZ LUGO CARLOS(GARANTE)</ApellNomb>
<Calle>ITALIA 6148</Calle>
<NombLoc>Rosario</NombLoc>
</Table>
</NewDataSet>


El primer codigo que probe...


Dim m_xmld As XmlDocument
Dim m_nodelist As XmlNodeList
Dim m_node As XmlNode

'Creamos el "XML Document"
m_xmld = New XmlDocument

'Cargamos el archivo
m_xmld.Load("C:\lista.xml")

'Obtenemos la lista de los nodos "name"
m_nodelist = m_xmld.SelectNodes("/NewDataSet/Table")

'Iniciamos el ciclo de lectura
For Each m_node In m_nodelist
'Obtenemos el atributo del codigo
' Dim mCodigo = m_node.Attributes.GetNamedItem("Table").Value

'Obtenemos el Elemento nombre
Dim CodCli = m_node.ChildNodes.Item(0).InnerText

'Obtenemos el Elemento apellido
Dim NroDoc = m_node.ChildNodes.Item(1).InnerText

Dim Apellido = m_node.ChildNodes.Item(2).InnerText

Dim Calle = m_node.ChildNodes.Item(3).InnerText

' Dim Nro = m_node.ChildNodes.Item(4).InnerText

Dim NombLoc = m_node.ChildNodes.Item(4).InnerText

Dim conexion As New Conexion
Dim parametros(4) As SqlParameter
parametros(0) = New SqlParameter("@codcli", SqlDbType.VarChar,
50)
parametros(0).Value = CodCli
parametros(1) = New SqlParameter("@nrodoc", SqlDbType.VarChar,
50)
parametros(1).Value = NroDoc
parametros(2) = New SqlParameter("@apellnomb",
SqlDbType.VarChar, 50)
parametros(2).Value = Apellido
parametros(3) = New SqlParameter("@calle", SqlDbType.VarChar,
50)
parametros(3).Value = Calle
'parametros(4) = New SqlParameter("@nro", SqlDbType.VarChar, 50)
'parametros(4).Value = Nro
parametros(4) = New SqlParameter("@nombloc", SqlDbType.VarChar,
50)
parametros(4).Value = NombLoc

conexion.ConectarSqlHelper("IngresaCliente", parametros)

'Escribimos el resultado en la consola,
'pero tambien podriamos utilizarlos en
'donde deseemos
' Console.Write("Codigo usuario: " & mCodigo _
' & " Nombre: " & mNombre _
' & " Apellido: " & mApellido)
' Console.Write(vbCrLf)

Next

Erro que tira al ller el XML: Información adicional: Referencia a objeto
no establecida como instancia de un objeto.


Segundo ejemplo que probe....

Dim m_xmlr As XmlTextReader
'Creamos el XML Reader
m_xmlr = New XmlTextReader("C:\lista.xml")

'Desabilitamos las lineas en blanco,
'ya no las necesitamos
m_xmlr.WhitespaceHandling = WhitespaceHandling.Significant

'Leemos el archivo y avanzamos al tag de usuarios
m_xmlr.Read()

'Leemos el tag usuarios
m_xmlr.Read()

'Creamos la secuancia que nos permite
'leer el archivo
While Not m_xmlr.EOF
'Avanzamos al siguiente tag
m_xmlr.Read()

'si no tenemos el elemento inicial
'debemos salir del ciclo
If Not m_xmlr.IsStartElement() Then
Exit While
End If

'Obtenemos el elemento codigo

'Read elements firstname and lastname

m_xmlr.Read()
'Obtenemos el elemento del Nombre del Usuario


'Obtenemos el elemento del Apellido del Usuario

Dim CodCli = m_xmlr.ReadElementString("CodCli")

'Obtenemos el Elemento apellido
Dim NroDoc = m_xmlr.ReadElementString("NroDoc")

Dim Apellido = m_xmlr.ReadElementString("ApellNomb")

Dim Calle = m_xmlr.ReadElementString("Calle")

' Dim Nro = m_node.ChildNodes.Item(4).InnerText

Dim NombLoc = m_xmlr.ReadElementString("NombLoc")

Dim conexion As New Conexion
Dim parametros(4) As SqlParameter
parametros(0) = New SqlParameter("@codcli", SqlDbType.VarChar,
50)
parametros(0).Value = CodCli
parametros(1) = New SqlParameter("@nrodoc", SqlDbType.VarChar,
50)
parametros(1).Value = NroDoc
parametros(2) = New SqlParameter("@apellnomb",
SqlDbType.VarChar, 50)
parametros(2).Value = Apellido
parametros(3) = New SqlParameter("@calle", SqlDbType.VarChar,
50)
parametros(3).Value = Calle
'parametros(4) = New SqlParameter("@nro", SqlDbType.VarChar, 50)
'parametros(4).Value = Nro
parametros(4) = New SqlParameter("@nombloc", SqlDbType.VarChar,
50)
parametros(4).Value = NombLoc

conexion.ConectarSqlHelper("IngresaCliente", parametros)

End While

'Cerramos la lactura del archivo
m_xmlr.Close()

Error que tira al leer el XML: Información adicional: Error del sistema.


Como dije, estos mismos codigos los probe con otra tabla, y funcionaron muy
bien.
Por que creen que podria ser el error, null, vacios...????


Otra consulta, ademas de estos dos codigos, alguno de ustedes conoce alguna
otra forma de leer un XML muy grande de mas de 12000 registros y que sea
rapido.


Daniel.


Hector Minaya [VB.Net MVP]

unread,
Jan 11, 2006, 10:10:28 PM1/11/06
to
Deberias tratar utilizando el metodo .ReadXML del dataset, es muy bueno.


"Daniel G. Samborski" <danielgs...@BORRAESTOyahoo.com.ar> wrote in
message news:%23KJjWQw...@TK2MSFTNGP11.phx.gbl...

Daniel G. Samborski

unread,
Jan 11, 2006, 10:50:22 PM1/11/06
to
Si, pero muy lento para leer cantidades de lineas.
12000 lineas demora una eternidad.

Daniel.

"Hector Minaya [VB.Net MVP]" <hminaya@vbdevelopers_NOSPAM.net> escribió en
el mensaje news:eFqW%23WyFG...@TK2MSFTNGP15.phx.gbl...

Jhonny Vargas P. [MVP]

unread,
Jan 12, 2006, 1:47:48 PM1/12/06
to
Hola Daniel,

Lo más rápido que he encontrado para subir archivos muuuuy grandes en XML
más de 100.000 registros es el Bulk Load XML.

Te adjunto un ejemplo y te lo recomiendo 100%.

http://support.microsoft.com/?scid=316005

--
Saludos,
Jhonny Vargas P.
Santiago de Chile
http://msmvps.com/jvargas
https://mvp.support.microsoft.com/profile=9F1AF0AC-85CF-4DC4-8741-BE6A88764F19


"Daniel G. Samborski" <danielgs...@BORRAESTOyahoo.com.ar> escribió en
el mensaje news:%23KJjWQw...@TK2MSFTNGP11.phx.gbl...

0 new messages