Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Eleкtro en 18 Diciembre 2012, 20:43 pm



Título: XmlDocument.LoadXml ¿Porque no me funciona?
Publicado por: Eleкtro en 18 Diciembre 2012, 20:43 pm
- ¿Porque no me funciona?
- ¿Y se puede cargar un archivo xml local sin setearlo en un string?

Código
  1. Imports System.Xml
  2. Imports System.Xml.Serialization
  3. Imports System.IO
  4.  
  5.  
  6.  
  7. Public Class Form1
  8.  
  9.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  10.  
  11.        Dim rawXML As String = _
  12.      "<Company>" & _
  13.      "  <Employee>" & _
  14.      "    <name>John</name>" & _
  15.      "    <Id>1</Id>" & _
  16.      "    <email>John@xxxxxx.com</email>" & _
  17.      "  </employee>" & _
  18.      "  <employee>" & _
  19.      "    <name>Sue</name>" & _
  20.      "    <Id>2</Id>" & _
  21.      "    <email>Sue@xxxxxx.com</email>" & _
  22.      "  </employee>" & _
  23.      "</Company>"
  24.  
  25.        Dim xmlDoc As New XmlDocument
  26.        Dim employeeNodes As XmlNodeList
  27.        Dim employeeNode As XmlNode
  28.        Dim baseDataNodes As XmlNodeList
  29.        Dim bFirstInRow As Boolean
  30.  
  31.        MsgBox("A")
  32.        xmlDoc.LoadXml(rawXML)
  33.        ' Este msgbox no se llega a ver
  34.        MsgBox("B")
  35.        employeeNodes = xmlDoc.GetElementsByTagName("name")
  36.  
  37.        For Each employeeNode In employeeNodes
  38.            baseDataNodes = employeeNode.ChildNodes
  39.            bFirstInRow = True
  40.  
  41.            For Each baseDataNode As XmlNode In baseDataNodes
  42.                If (bFirstInRow) Then
  43.                    bFirstInRow = False
  44.                Else
  45.                    MsgBox(", ")
  46.                End If
  47.                MsgBox(baseDataNode.Name & ": " & baseDataNode.InnerText)
  48.            Next
  49.        Next
  50.    End Sub
  51. End Class


Título: Re: XmlDocument.LoadXml ¿Porque no me funciona?
Publicado por: Novlucker en 18 Diciembre 2012, 22:17 pm
Vuelve a probar así ...

Código
  1. Imports System.Xml
  2. Imports System.Xml.Serialization
  3. Imports System.IO
  4.  
  5. Public Class Form1
  6.  
  7.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  8.  
  9.        Dim rawXML As String = _
  10.      "<Company>" & _
  11.      "  <Employee>" & _
  12.      "    <name>John</name>" & _
  13.      "    <Id>1</Id>" & _
  14.      "    <email>John@xxxxxx.com</email>" & _
  15.      "  </employee>" & _
  16.      "  <employee>" & _
  17.      "    <name>Sue</name>" & _
  18.      "    <Id>2</Id>" & _
  19.      "    <email>Sue@xxxxxx.com</email>" & _
  20.      "  </employee>" & _
  21.      "</Company>"
  22.  
  23.        Dim xmlDoc As New XmlDocument
  24.        Dim employeeNodes As XmlNodeList
  25.        Dim employeeNode As XmlNode
  26.        Dim baseDataNodes As XmlNodeList
  27.        Dim bFirstInRow As Boolean
  28.  
  29.        MsgBox("A")
  30.        Try
  31.        xmlDoc.LoadXml(rawXML)
  32.        Catch ex As Exception
  33.        End Try
  34.        ' Este msgbox no se llega a ver
  35.        MsgBox("B")
  36.        employeeNodes = xmlDoc.GetElementsByTagName("name")
  37.  
  38.        For Each employeeNode In employeeNodes
  39.            baseDataNodes = employeeNode.ChildNodes
  40.            bFirstInRow = True
  41.  
  42.            For Each baseDataNode As XmlNode In baseDataNodes
  43.                If (bFirstInRow) Then
  44.                    bFirstInRow = False
  45.                Else
  46.                    MsgBox(", ")
  47.                End If
  48.                MsgBox(baseDataNode.Name & ": " & baseDataNode.InnerText)
  49.            Next
  50.        Next
  51.    End Sub
  52. End Class

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

Saludos


Título: Re: XmlDocument.LoadXml ¿Porque no me funciona?
Publicado por: Eleкtro en 18 Diciembre 2012, 22:30 pm
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...

Código:
"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
  1.        Try
  2.            xmlDoc.Load("C:\t.xml")
  3.        Catch ex As Exception
  4.            MessageBox.Show(ex.Message)
  5.        End Try

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


Título: Re: XmlDocument.LoadXml ¿Porque no me funciona?
Publicado por: Novlucker en 18 Diciembre 2012, 22:51 pm
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