XmlDocument.LoadXml ¿Porque no me funciona?

Iniciado por Eleкtro, 18 Diciembre 2012, 20:43 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

- ¿Porque no me funciona?
- ¿Y se puede cargar un archivo xml local sin setearlo en un string?

Código (vbnet) [Seleccionar]
Imports System.Xml
Imports System.Xml.Serialization
Imports System.IO



Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim rawXML As String = _
      "<Company>" & _
      "  <Employee>" & _
      "    <name>John</name>" & _
      "    <Id>1</Id>" & _
      "    <email>John@xxxxxx.com</email>" & _
      "  </employee>" & _
      "  <employee>" & _
      "    <name>Sue</name>" & _
      "    <Id>2</Id>" & _
      "    <email>Sue@xxxxxx.com</email>" & _
      "  </employee>" & _
      "</Company>"

        Dim xmlDoc As New XmlDocument
        Dim employeeNodes As XmlNodeList
        Dim employeeNode As XmlNode
        Dim baseDataNodes As XmlNodeList
        Dim bFirstInRow As Boolean

        MsgBox("A")
        xmlDoc.LoadXml(rawXML)
        ' Este msgbox no se llega a ver
        MsgBox("B")
        employeeNodes = xmlDoc.GetElementsByTagName("name")

        For Each employeeNode In employeeNodes
            baseDataNodes = employeeNode.ChildNodes
            bFirstInRow = True

            For Each baseDataNode As XmlNode In baseDataNodes
                If (bFirstInRow) Then
                    bFirstInRow = False
                Else
                    MsgBox(", ")
                End If
                MsgBox(baseDataNode.Name & ": " & baseDataNode.InnerText)
            Next
        Next
    End Sub
End Class








Novlucker

Vuelve a probar así ...

Código (vbnet,11,15,30,32,33) [Seleccionar]
Imports System.Xml
Imports System.Xml.Serialization
Imports System.IO

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim rawXML As String = _
      "<Company>" & _
      "  <Employee>" & _
      "    <name>John</name>" & _
      "    <Id>1</Id>" & _
      "    <email>John@xxxxxx.com</email>" & _
      "  </employee>" & _
      "  <employee>" & _
      "    <name>Sue</name>" & _
      "    <Id>2</Id>" & _
      "    <email>Sue@xxxxxx.com</email>" & _
      "  </employee>" & _
      "</Company>"

        Dim xmlDoc As New XmlDocument
        Dim employeeNodes As XmlNodeList
        Dim employeeNode As XmlNode
        Dim baseDataNodes As XmlNodeList
        Dim bFirstInRow As Boolean

        MsgBox("A")
        Try
        xmlDoc.LoadXml(rawXML)
        Catch ex As Exception
        End Try
        ' Este msgbox no se llega a ver
        MsgBox("B")
        employeeNodes = xmlDoc.GetElementsByTagName("name")

        For Each employeeNode In employeeNodes
            baseDataNodes = employeeNode.ChildNodes
            bFirstInRow = True

            For Each baseDataNode As XmlNode In baseDataNodes
                If (bFirstInRow) Then
                    bFirstInRow = False
                Else
                    MsgBox(", ")
                End If
                MsgBox(baseDataNode.Name & ": " & baseDataNode.InnerText)
            Next
        Next
    End Sub
End Class


Para cargarlo desde un archivo puedes utilizar Load en lugar de LoadXml

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Eleкtro

#2
Nada Nov, no quiere funcionar... no me salta ninguna excepción.
Lo de "Load" lo había visto pero como me decía que era para una URL... xD lo he intentado con load y la app se cuelga en donde la excepción, pero no me manda ningún error, juas.




EDITO:
Vale, ahora sí me salta excepción...

"There are multiple root elements. Line 2, position 2."

¿Porque me dice que hay multiples elementos, si en teoría de lo que se trata es de obtener multiples elementos del mismo TagName xD?

Código (vbnet) [Seleccionar]
       Try
           xmlDoc.Load("C:\t.xml")
       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try


t.xml:
<name>1</name>
<name>2</name>
<name>3</name>
<name>4</name>








Novlucker

#3
Si pones un punto de interrupción en la línea 32 del código que te he dejado ves la excepción, que de hecho he marcado más arriba, tu nodo comienza con Employee y termina con employee.

Sobre tu segundo error, los XML tienen que tener un solo nodo raíz.

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein