Hallo,
also ich wollte fragen, wie ich z.B
<waypoint>X=1270.222 Y=1242.654 Z=21</waypoint>
in einer .xml Datei "lesen" kann und es dann so splitten
X
Y
Z
mfg, Bl1zz4rD
Druckbare Version
Hallo,
also ich wollte fragen, wie ich z.B
<waypoint>X=1270.222 Y=1242.654 Z=21</waypoint>
in einer .xml Datei "lesen" kann und es dann so splitten
X
Y
Z
mfg, Bl1zz4rD
ahhhh shit, verlesen...
ich glaube mit getelementbytagname("waypoint")(0).innertext oder innerxml
sollte es gehen...
Und den Text dann noch richtig aufteilen... hmmm also es gibt sicherlich schönere Möglichkeiten:
dim sInhalt as string = getelementbytagname("waypoint")(0).innertex
dim x as sting
dim y as string
dim z as string
x = split(split(sInhalt,"X=")(1)," ")(0)
y = split(split(sInhalt,"Y=")(1)," ")(0)
z = split(sInhalt,"Z=")(1)
Funktioniert super, danke :>
/e: Ok ein etwas anderes kleines Problem:
"Es sind mehrere Stammelemente vorhanden. Zeile 2, Position 2."
Also die .xml Datei:
<waypoint>X=2410 Y=200 Z=21</waypoint>
<waypoint>X=1000 Y=000 Z=10</waypoint>
Also bislang sieht das ganze so aus:
Code:Dim aDoc = New XmlDocument()
aDoc.Load("C:\test.xml")
Dim sInhalt As String = aDoc.GetElementsByTagName("waypoint")(0).InnerText
Dim x As String
Dim y As String
Dim z As String
x = Split(Split(sInhalt, "X=")(1), " ")(0)
y = Split(Split(sInhalt, "Y=")(1), " ")(0)
z = Split(sInhalt, "Z=")(1)
MsgBox(x & vbNewLine & y & vbNewLine & z)
Ich würde so oder so die RegEx Variante bevorzugen.
Hier ein Muster für dich.
Mehrere Treffer finden und in der TextBox ausgeben
Das musst du natürlich deinen Bedürfnissen etwas anpassen.Code:
Dim RegEx_Treffer As New Regex("<waypoint>X=(?<X>(.*)) Y=(?<Y>(.*)) Z=(?<Z>(.*))</waypoint>")
Dim Treffergruppe As MatchCollection
Dim Treffer As Match
Dim ListBox As New ListBox
Dim Zahl As Integer
Try
Treffergruppe = RegEx_Treffer.Matches(RichTextBox1.Text)
For Each Treffer In Treffergruppe
ListBox.Items.Add(Treffer.Groups("X").Value & " " & Treffer.Groups("Y").Value & " " & Treffer.Groups("Z").Value)
Next
For Zahl = 0 To ListBox.Items.Count
TextBox1.Text &= ListBox.Items(Zahl) & vbCrLf
Next
Catch ex As Exception
End Try
Edit:
Das Teil mit ListBox brauchst gar nicht, das habe ich nur zum testen für mich eingebaut.
So sollte es dann aussehen.
Code:Dim RegEx_Treffer As New Regex("<waypoint>X=(?<X>(.*)) Y=(?<Y>(.*)) Z=(?<Z>(.*))</waypoint>")
Dim Treffergruppe As MatchCollection
Dim Treffer As Match
Try
Treffergruppe = RegEx_Treffer.Matches(RichTextBox1.Text)
For Each Treffer In Treffergruppe
'ERGEBNIS
TextBox1.Text &= Treffer.Groups("X").Value & " " & Treffer.Groups("Y").Value & " " & Treffer.Groups("Z").Value & vbNewLine
'ODER
MsgBox(Treffer.Groups("X").Value & " " & Treffer.Groups("Y").Value & " " & Treffer.Groups("Z").Value & vbNewLine)
Next
Catch ex As Exception
End Try
GetElementById gibt dir ein Array zurück, du kannst mit einer for each Schleife alle elemente durchlaufen
Damit gehst du jeden einzelnen waypoint durch.Zitat:
for each E as xmlelement in getelementbytagname("waypoint") ' ich weiß nicht, ob es xmlelement heißt
dim sInhalt as string = E.innertext()
dim x as string
dim y as string
'den rest kennste ja
next
Danke, aber die Methode von krusty ist war nicht die beste, aber auch die leichteste :>.
Habs nun herausgefunden, das die xml Datei nur
1x
<waypoint>
Inhalt
</waypoint>
beinhalten darf, aber eigentlich will ich
<Profile>
<waypoint>XYZ</waypoint>
<waypoint>XYZ</waypoint>
<waypoint>XYZ</waypoint>
....
</Profile>
Das ganze so haben.