Principales respuestas
Problema con Leer XML

Pregunta
-
Buenas tardes, tengo un problema con leer archivos xml, ( ya he leido otros articulos en el foro pero no he encontrado la solucion) (son documento electronicos en chile
<?xml version="1.0" encoding="ISO-8859-1"?>
<DTE xmlns="http://www.sii.cl/SiiDte" version="1.0">
<Documento ID="F4197935T33">
<Encabezado>
<IdDoc>
<TipoDTE>33</TipoDTE>
<Folio>4197935</Folio>
<FchEmis>2017-08-26</FchEmis>
<FchVenc>2017-09-25</FchVenc>
</IdDoc>el archivo claramente continua, una solucion que he encontrado es abrir el archivo en un editor de xml y borrar el xmlns o colocarlo en "", asi
<?xml version="1.0" encoding="ISO-8859-1"?>
<DTE version="1.0">
<Documento ID="F4197935T33">
<Encabezado>
<IdDoc>
<TipoDTE>33</TipoDTE>
<Folio>4197935</Folio>
<FchEmis>2017-08-26</FchEmis>
<FchVenc>2017-09-25</FchVenc>
</IdDoc>y ahi si me funciona el codigo que he escrito para leer el archivo
Dim oFileInfo As IO.FileInfo = Nothing
Try
Using oOpenFileDialog As New OpenFileDialog
oOpenFileDialog.Filter = "xml files (*.xml)|*.xml"
oOpenFileDialog.Multiselect = False
If oOpenFileDialog.ShowDialog(Me) = DialogResult.OK Then
If IO.File.Exists(oOpenFileDialog.FileName) Then
oFileInfo = New IO.FileInfo(oOpenFileDialog.FileName)
End If
End If
End Using
If oFileInfo IsNot Nothing Then
If IO.File.Exists(oFileInfo.FullName) Then
Dim documento As New XmlDocument()
documento.Load(oFileInfo.FullName)
XmlVB = True
Dim IdDocList As XmlNodeList = documento.SelectNodes("/DTE/Documento/Encabezado/IdDoc")
For Each iddocl As XmlNode In IdDocList
TipoDte = iddocl.SelectSingleNode("TipoDTE").InnerText
Folio = iddocl.SelectSingleNode("Folio").InnerText
FchEmis = iddocl.SelectSingleNode("FchEmis").InnerText
If iddocl.SelectSingleNode("FmaPago") Is Nothing Then
FormaPago = String.Empty
Else
FormaPago = iddocl.SelectSingleNode("FmaPago").InnerText
End If
If iddocl.SelectSingleNode("FchVenc") Is Nothing Then
FchVenc = String.Empty
Else
FchVenc = iddocl.SelectSingleNode("FchVenc").InnerText
End If
Label2.Text = Folio
Label3.Text = "Fecha Emision " & FchEmis
Label4.Text = "Fecha Vencimiento " & FchVenc
NextEnd If
End if
Cualquier ayuda lo agradecere, ya que no me es practico abrir y eliminar siempre lo del xmlns del XML
Gracias
- Cambiado Enrique M. Montejo miércoles, 13 de septiembre de 2017 8:22 Pregunta relacionada con Web Services.
Respuestas
-
Hola, si son documentos electrónicos de Chile debería haber un esquema cada oficial. He visto que está en este enlace http://www.sii.cl/factura_electronica/formato_xml.htm
Bájate los esquemas y usa el programa xsd.exe que puedes usarlo con la consola de desarrollo de Visual Studio para generar las clases en tu lenguaje .net y usarlas. Deberías usar después la s técnicas de serialización y deserializacion.
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos
- Editado Sergio Parra jueves, 7 de septiembre de 2017 17:48
- Marcado como respuesta Enrique M. Montejo miércoles, 13 de septiembre de 2017 8:22
Todas las respuestas
-
AQUI VA LA MANERA MAS FACIL LA FORMA DE LEERLO POR LINEAS <?xml version="1.0" encoding="utf-8"?> <Variables> <Configuracion> <Dsn>basedatos1</Dsn> <Uid>root1</Uid> <Uid2>root</Uid2> </Configuracion> <xNodos> <Dsn>basedatos2</Dsn> <Uid>root2</Uid> </xNodos> </Variables> SUB.... Dim documento As New XmlDocument Dim nodo As XmlNode documento.Load("variables_sys.xml") For Each nodo In documento.DocumentElement.ChildNodes If nodo.Name = "Configuracion" Then Me.txt_1.Text = nodo.ChildNodes(0).InnerText 'DSN Me.txt_2.Text = nodo.ChildNodes(2).InnerText ELSE ... //QUIERES LEER MAS </xNodos>
End If Next tu resultado seria: txt_1=BASEDATOS1 txt_2=ROOT END SUB...
Pasa los puntos prro v:
- Editado D A M N 1 S e l f jueves, 7 de septiembre de 2017 17:32
- Propuesto como respuesta D A M N 1 S e l f jueves, 7 de septiembre de 2017 17:46
-
Hola,
Necesitas incluir el namespace:
Dim nsmgr As XmlNamespaceManager
nsmgr = New XmlNamespaceManager(documento.NameTable)
nsmgr.AddNamespace(String.Empty, "http://www.sii.cl/SiiDte")Espero que te sirva.
Saludos.
- Editado Horroroso Horroroso jueves, 7 de septiembre de 2017 17:41
-
Dim ruta As String = ""
Dim xtr As New XmlTextReader("variables_sys.xml")
If xtr.Read = True Then
Do While xtr.Read
If xtr.NodeType = XmlNodeType.Element Then
Select Case xtr.Name
Case "Dsn"
xtr.Read()
If xtr.NodeType = XmlNodeType.Text Then
txt1.text= xtr.Value
End IfCase "Uid2"
xtr.Read()
If xtr.NodeType = XmlNodeType.Text Then
txt2.text= xtr.Value
End IfEnd Select
End If
Loop
End If
xtr.Close() 'NO OLVIDES DE CERRAR TU XML DESPUES DE LEER
Return rutaBueno esto es otro método mas seguro ya que te ubica el nodo por valor y no por posición pero a cambio de la seguridad se demora mucho mas que obtenerlo por posición , con el método 1
Pasa los puntos prro v:
- Propuesto como respuesta D A M N 1 S e l f jueves, 7 de septiembre de 2017 17:46
-
Hola, si son documentos electrónicos de Chile debería haber un esquema cada oficial. He visto que está en este enlace http://www.sii.cl/factura_electronica/formato_xml.htm
Bájate los esquemas y usa el programa xsd.exe que puedes usarlo con la consola de desarrollo de Visual Studio para generar las clases en tu lenguaje .net y usarlas. Deberías usar después la s técnicas de serialización y deserializacion.
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos
- Editado Sergio Parra jueves, 7 de septiembre de 2017 17:48
- Marcado como respuesta Enrique M. Montejo miércoles, 13 de septiembre de 2017 8:22
-
Try
If MessageBox.Show(Me, "Confirma actualizar estos datos ?..", "Confirmación", MessageBoxButtons.YesNo, _
MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign) = Windows.Forms.DialogResult.Yes Then
Dim documento As New XmlDocument
Dim nodo As XmlNode
documento.Load("variables_sys.xml")
Dim idAlmacen1 As String = Me.txt_basesql.Text.Trim
For Each nodo In documento.DocumentElement.ChildNodes
If nodo.Name = "Configuracion" Then
nodo.ChildNodes(0).InnerText = txt_1.Text.Trim 'NUEVO VALOR
else .... //Actualizar mas nodosEnd If
Next
documento.Save("variables_sys.xml")MsgBox("Se actualizó correctamente.", MsgBoxStyle.Information, "Informa")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
Pasa los puntos prro v:
- Editado D A M N 1 S e l f jueves, 7 de septiembre de 2017 17:56
-
-