xml bestand lezen lukt niet goed

Status
Niet open voor verdere reacties.

Victorr99

Gebruiker
Lid geworden
2 jun 2015
Berichten
83
Beste helpmijers,

Ik heb een xml bestand waar ik een waarde van wil krijgen
[XML]<?xml version="1.0" encoding="UTF-8"?>
<bla1>
<itl groupname="iets1">
<it id="001">
<value>waarde1.1</value>
</it>
<it id="002">
<value>waarde1.2</value>
</it>
<it id="003">
<value>waarde1.3</value>
</it>
<!--
In deze groep krijg ik alle waardes
-->
</itl>
<itl groupname="iets2">
<it id="001">
<value>waarde2.1</value>
</it>
<it id="002">
<value>waarde2.2</value>
</it>
<it id="003">
<value>waarde2.3</value>
</it>
<!--
In deze groep lukt dit niet.
-->
</itl>
</bla1>
<!--
itl = itemlist
it = item
de rest wijst zich vanzelf
-->[/XML]

Als ik een waarde wil hebben van bla1 / itl groupname="iets1" / it id="002" / value. Lukt het.
Maar als ik een waarde wil hebben van bla1 / itl groupname="iets2" / it id="002" / value. Lukt dit niet.
Ik werk nog niet zo lang met xml en xml in vb.net dus waarschijnlijk is het een simpel foutje.
vb.net code:
Code:
Dim rxml As XmlTextReader
rxml = New XmlTextReader("C:\bla\bla\xmldocument.xml")
Dim Value = Nothing
Dim idAttr As String = Nothing
rxml.WhitespaceHandling = WhitespaceHandling.None
rxml.Read()
Do While Not rxml.EOF
	rxml.Read()
	If Not rxml.IsStartElement Then Exit Do
	If rxml.GetAttribute("groupname") = "iets2" Then
		rxml.Read()
		Do Until rxml.GetAttribute("id") = "002"
			rxml.Read()
                Loop
		rxml.Read()
		Value = rxml.ReadElementString("value")
                Exit Do
	End If
Loop
Return Value

Alvast bedankt!

mvg, Victor
 
Je kun ook XmlDocument gebruiken in plaats van regel voor regel door het document te gaan. Zo kun je alles makkelijk per node uitlezen, wijzigen etc.

Je kunt uitlezen wat je nodig hebt of zoals in het voorbeeld alles in classes zetten om daarna makkelijk de 'strong typed' lijst gebruiken.
(er zit geen controle in het voorbeeld zoals of een attribute er is of niet)

Code:
Private Function LoadDocument() As List(Of Group)
	Dim document = New XmlDocument()
	document.Load("filepath")

	Dim itemlistNodes = document.DocumentElement.ChildNodes

	Dim lists = New List(Of Group)()
	For Each itemlistNode As XmlNode In itemlistNodes
		Dim group = New Group()

		'groupname
		group.Name = itemlistNode.Attributes("groupname").Value

		'items
		For Each itemNode As XmlNode In itemlistNode.ChildNodes
			Dim item = New Item()

			item.Id = itemNode.Attributes("id").Value
			item.Value = itemNode("value").InnerText

			group.Items.Add(item)
		Next

		lists.Add(group)
	Next

	Return lists
End Function

Code:
Private Class Group
	Public Sub New()
		Items = New List(Of Item)()
	End Sub

	Public Property Name() As String
		Get
			Return m_Name
		End Get
		Set
			m_Name = Value
		End Set
	End Property
	Private m_Name As String
	Public Property Items() As List(Of Item)
		Get
			Return m_Items
		End Get
		Set
			m_Items = Value
		End Set
	End Property
	Private m_Items As List(Of Item)
End Class

Code:
Private Class Item
	Public Property Id() As String
		Get
			Return m_Id
		End Get
		Set
			m_Id = Value
		End Set
	End Property
	Private m_Id As String
	Public Property Value() As String
		Get
			Return m_Value
		End Get
		Set
			m_Value = Value
		End Set
	End Property
	Private m_Value As String
End Class
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan