Ergebnis 1 bis 6 von 6
  1. #1
    Sobig Wurm Avatar von Bl1zz4rD
    Registriert seit
    28.10.2008
    Beiträge
    226

    Standard [VB.net] xml - Getelementbytags

    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

    640 Kilobyte RAM sind genug für jeden. (Bill Gates, 1981)

    BM-Profil
    0 | 0 | 6


  2. #2
    CIH-Virus Avatar von krusty
    Registriert seit
    12.10.2008
    Beiträge
    445

    Standard

    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)

  3. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Bl1zz4rD (21.12.2010)

  4. #3
    Sobig Wurm Avatar von Bl1zz4rD
    Registriert seit
    28.10.2008
    Beiträge
    226

    Standard

    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

    640 Kilobyte RAM sind genug für jeden. (Bill Gates, 1981)

    BM-Profil
    0 | 0 | 6


  5. #4
    Sobig Wurm Avatar von BlackHook
    Registriert seit
    13.03.2009
    Beiträge
    219

    Standard

    Ich würde so oder so die RegEx Variante bevorzugen.
    Hier ein Muster für dich.

    Mehrere Treffer finden und in der TextBox ausgeben
    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
    Das musst du natürlich deinen Bedürfnissen etwas anpassen.

    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)

  6. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Bl1zz4rD (21.12.2010)

  7. #5
    CIH-Virus Avatar von krusty
    Registriert seit
    12.10.2008
    Beiträge
    445

    Standard

    GetElementById gibt dir ein Array zurück, du kannst mit einer for each Schleife alle elemente durchlaufen
    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
    Damit gehst du jeden einzelnen waypoint durch.
    Geändert von krusty (21.12.2010 um 18:59 Uhr)

  8. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Bl1zz4rD (21.12.2010)

  9. #6
    Sobig Wurm Avatar von Bl1zz4rD
    Registriert seit
    28.10.2008
    Beiträge
    226

    Standard

    Zitat Zitat von BlackHook Beitrag anzeigen
    Ich würde so oder so die RegEx Variante bevorzugen.
    Hier ein Muster für dich.

    Mehrere Treffer finden und in der TextBox ausgeben
    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
    Das musst du natürlich deinen Bedürfnissen etwas anpassen.

    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
    Danke, aber die Methode von krusty ist war nicht die beste, aber auch die leichteste :>.
    Zitat Zitat von krusty Beitrag anzeigen
    GetElementById gibt dir ein Array zurück, du kannst mit einer for each Schleife alle elemente durchlaufen

    Damit gehst du jeden einzelnen waypoint durch.
    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)

    640 Kilobyte RAM sind genug für jeden. (Bill Gates, 1981)

    BM-Profil
    0 | 0 | 6


Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •