- ¿Porque no me funciona?
- ¿Y se puede cargar un archivo xml local sin setearlo en un string?
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
Vuelve a probar así ...
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
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?
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>
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