Hej! Det blir lurigt att lösa det med XmlTextReader.. Tack, har kikat lite lätt på det nu och det verkar helt klart ha potential. Det fungerade bra med XPath, ruskigt smidigt.XML-parsing
Behöver lite hjälp med att parsa en xml-fil. Filen hanterar matcher inom fotboll. Där hemmalagets och bortalagets spelare presenteras samt vilket betyg de fick i den specifika matchen.
Har följande struktur på min xml-fil
<code>
<matchid="1">
<playerdata>
<hometeam>
<player id="1">
<name>Nisse</name>
<position>1</position>
<rating>8</rating>
</player>
<player id="2">
<name>Kalle</name>
<position>2</position>
<rating>10</rating>
</player>
</hometeam>
<awayteam>
<player id="1">
<name>Sture</name>
<position>1</position>
<rating>8</rating>
</player>
<player id="2">
<name>August</name>
<position>2</position>
<rating>10</rating>
</player>
</awayteam>
</playerdata>
</matchid>
</code>
Sedan följer flera matcher...
Hur gör jag för att kunna plocka ut exempelvis "rating" i bara "hometeam" för en specifik match?
Använder mig av följande XmlTextReader och readToFollowing för att komma åt specifika element. Skulle vilja kunna nå alla element och attribut inom ett visst element exempelvis hometeam.
Exempelkod som summerar ratings:
matchId 'Inparameter för matchens id
Dim xtr As New XmlTextReader(xmlfile)
Dim summa As Double = 0
While xtr.Read
xtr.ReadToFollowing("match")
If xtr.Name = "match" Then
If xtr.GetAttribute("id") = matchId Then
xtr.ReadToFollowing("rating")
If xtr.ReadString.Length > 0 Then
summa = summa + CDbl(xtr.ReadString)
End If
End If
End If
End While
Problemet här är att jag bara får första spelarens rating, måste få in det i en snurra på nåt sätt och att det bara ska gälla hemmalaget.
Någon som har koll på sånt här?
Sv: XML-parsing
(men om prestandakraven är höga så är det en bra lösning..)
Jag tycker du ska titta på xpath i stället, det passar bra för den här typen av problem.
http://www.developerland.com/DotNet/XMLNET/235.aspxSv:XML-parsing
Återkommer säkert då jag tittat mer på det =)Sv:XML-parsing
Så här blev funktionen för att summera ratings till slut.
Private Function GetHomeRatings(ByVal file As String, ByVal matchId As String) As String
Dim doc As New XmlDocument
Dim nodelist As XmlNodeList
Dim node As XmlNode
Dim rating As String
Dim summa As Double
Try
summa = 0
doc.Load(file)
nodelist = doc.DocumentElement.SelectNodes("/fc-team-matches/match[@id=" + matchId + "]/playerdata/hometeam/player/rating")
For Each node In nodelist
If node.InnerText <> "" Then 'Avbytarna har ingen rating
rating = Replace(node.InnerText, ".", ",") 'Byta punkt mot komma för att kunna räkna.
summa = summa + CDbl(rating)
End If
Next
Catch ex As XPathException
MsgBox("Xml filen ändrad" + ex.Message)
Catch ex As Exception
MsgBox("Annat fel: " + ex.Message)
End Try
Return CStr(summa)
End Function