Leer XML

11/01/2006 - 23:58 por Daniel G. Samborski | Informe spam
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.

Preguntas similare

Leer las respuestas

#1 Hector Minaya [VB.Net MVP]
12/01/2006 - 04:10 | Informe spam
Deberias tratar utilizando el metodo .ReadXML del dataset, es muy bueno.


"Daniel G. Samborski" wrote in
message news:%
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.

Respuesta Responder a este mensaje
#2 Daniel G. Samborski
12/01/2006 - 04:50 | Informe spam
Si, pero muy lento para leer cantidades de lineas.
12000 lineas demora una eternidad.

Daniel.

"Hector Minaya [VB.Net MVP]" escribió en
el mensaje news:eFqW%
Deberias tratar utilizando el metodo .ReadXML del dataset, es muy bueno.


"Daniel G. Samborski" wrote in
message news:%
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.





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida