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
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)
Geändert von krusty (21.12.2010 um 16:36 Uhr)
Bl1zz4rD (21.12.2010)
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)
Geändert von AlterHacker (21.12.2010 um 20:12 Uhr) Grund: FQ entfernt
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
Geändert von BlackHook (21.12.2010 um 18:14 Uhr)
Bl1zz4rD (21.12.2010)
GetElementById gibt dir ein Array zurück, du kannst mit einer for each Schleife alle elemente durchlaufen
Damit gehst du jeden einzelnen waypoint durch.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
Geändert von krusty (21.12.2010 um 18:59 Uhr)
Bl1zz4rD (21.12.2010)
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.
Geändert von Bl1zz4rD (21.12.2010 um 20:54 Uhr)