Fragen zu XML

Startseite Foren Deutsches LiveCode-Forum Fragen zu XML

Schlagwörter: 

Ansicht von 12 Antwort-Themen
  • Autor
    Beiträge
    • #3594
      Andreas S.
      Teilnehmer

      Hallo Leute

      Seit Anfang Dezember bastel ich schon (dank Haukes Buch) mit Livecode rum…
      Jetzt hab ich mal eine Frage zu XML…
      als Geocacher nutze ich gelegentlich für meine Tourplanungen *.LOC-Files die XML basierend sind und ich mir nun einen LOC-Viewer basteln wollte (Übergabe in ein Datagrid, anzeige auf GoogleMap usw…)

      Beispielaufbau eines LOC-Files (eingetragene Daten sind Fiktiv):

      <?xml version="1.0" encoding="UTF-8"?>
      <loc version="1.0" src="Groundspeak">
      	<waypoint> 
      		<name id="GCCODELC"><![CDATA[Das is ne Dose  by irgendeinCacher1]]></name>
      		<coord lat="49.85765" lon="8.252717"/>
      		<type>Geocache</type>
      		<link text="Cache Details">http://www.geocaching.com/seek/cache_details.aspx?wp=GCCODELC</link>
      		<difficulty>2</difficulty>
      		<terrain>2.5</terrain>
      		<container>2</container>
      	</waypoint>
      	<waypoint> 
      		<name id="GCCODEXM"><![CDATA[Isch bin ein Cache  by irgendeinCacher2]]></name>
      		<coord lat="79.85765" lon="5.272717"/>
      		<type>Geocache</type>
      		<link text="Cache Details">http://www.geocaching.com/seek/cache_details.aspx?wp=GCCODEXM</link>
      		<difficulty>2</difficulty>
      		<terrain>2.5</terrain>
      		<container>2</container>
      	</waypoint>
      </loc>

      Soweit so gut

      Laden des Files klappt ja schon…
      Jetzt hab ich versucht nach einer „englischen“ Anleitung wie man XML ausliest das ganze auf meine Interessen aufzubauen. Leider bin ich aber hier gescheitert, da diese Anleitung für mich persönlich doch etwas unverständlich war und für einen „Newbie“ in LC nicht wirklich nachvollziehbar.

      Kennt jemand einen verständlichen Artikel oder eine Anleitung, am besten in Deutsch, wie man XML ausliest bzw. damit arbeiten kann?

      Nicht Falsch verstehen, ich frage hier nicht nach einem fertigen Script, sondern um eine verständliche Anleitung wie man XML in LC bearbeitet bzw Verarbeitet… Basteln will ich schon selbst.

      Vielen Dank schonmal vorab wenn mir jemand einen Tipp geben kann.

    • #3615
      gfz
      Teilnehmer

      Hallo Andreas, welchen englischen Artikel hast Du versucht?
      LG,
      Georg

    • #3620
      gfz
      Teilnehmer

      Hallo nochmals Andreas,
      ich habe diesen Artikel gefunden:
      http://lessons.livecode.com/m/4071/l/7011-how-to-read-in-data-from-an-xml-file

      So wie ich das verstehe, müsstest Du nur die Routine „private command processPreferencesTree pTree“ an Deine Bedürfnisse anpassen, je nachdem welche Daten Du aus dem Loc-File extrahieren willst.
      Eventuell auch die Funktion zum Einlesen der Datei.
      LG,
      Georg

    • #3622
      Andreas S.
      Teilnehmer

      Hallo Georg…

      Danke für deine Antwort

      Bin sogar schon ein Schritt weiter… das LOC-File kann ich auslesen, das Funktioniert auch soweit.
      Stand ein wenig auf dem Schlauch und hatte einfach nen schlechten Tag als ich das thema angegangen bin *ggg*

      Das ganze sieht jetzt so aus:

      private command processLOCTree pTree
         	
         local tnameid, tname, tlat, tlon, tAusgabe
         local tWPs, tLWPs
         
         put revXMLChildNames(pTree, "loc", return, "waypoint", false) into tWPs
         repeat for each line waypoint in tWPs   
                  
            put revXMLAttribute(pTree, "loc/waypoint/name", "id") into tnameid
            put revXMLNodeContents(pTree, "loc/waypoint/name") into tname
            put revXMLAttribute(pTree, "loc/waypoint/coord", "lat") into tlat
            put revXMLAttribute(pTree, "loc/waypoint/coord", "lon") into tlon
            put "Name = " & tnameid &": "& tname & return & "Coord = " & tlat &", "& tlon & return after tLWPs
            put return after tLWPs
         
         end repeat
         
         put tLWPs after tAusgabe
         set the text of field "text" to tAusgabe
          
         
      end processLOCTree
      

      Wie man sieht will ich nur die ID (auch GCCODE genannt), der Name des Cache und die Coordinaten aus den einzelnen Waypoints ziehen.

      Das klappt auch soweit, auch der Repeat läuft. Hab ein LOC-File bis 25 Waypoints zum testen, die der Repeat auch entsprechend abläuft… nur das er mir hier in jeder repeat-Runde nur den Content des ersten Waypoints des LOCs anzeigt…

      Such grad den fehler… find ihn nur grade nicht… :/

    • #3624
      gfz
      Teilnehmer

      Hi,
      wenn Du in der Schleife mit put nicht in eine Variable sondern in die Message Box schreibst, erhältst Du dann alle Daten oder auch nur den Inhalt des ersten Waypoints?
      mfG,
      Georg

    • #3626
      gfz
      Teilnehmer

      Noch was,
      was liefert „the number of lines of tWPs“ bevor du in die Schleife gehst?
      mfG,
      Georg

    • #3628
      Andreas S.
      Teilnehmer

      Schon ausprobiert… auch da immer nur den inhalt des ersten WPs…
      Ich denke das ich einen Denkfehler in der Schleife an sich hab, das er immer nur den ersten ausliest

    • #3630
      Andreas S.
      Teilnehmer

      Derzeit hab ich ein File mit 3 Waypoints im Test (ist übersichtlicher)
      the number of lines of tWPs sagt mir auch das er drei drin hat…

      also nochmal zurück an die Bücher und Schleifen pauken.
      selbst schuld wenn man jahrelang nix gemacht hat und jetzt wieder anfangen will… *lach*

    • #3632
      gfz
      Teilnehmer

      Hi,
      mir ist schon was in deiner Schleife aufgefallen.
      repeat for each line x in Variable


      end repeat
      Du verwendest x nicht im Schleifenrumpf!
      mfG,
      Georg

    • #3634
      gfz
      Teilnehmer

      Ich weiß zwar nicht was in tWPs abgespeichert wird, aber du beziehst dich in deiner Schleife weder auf die eingelesene Zeile (waypoint) noch auf tWPs.
      Meiner Meinung müsstest Du in „waypoint“ nach den gewünschten Inhalten suchen und nicht in pTree.
      mfG,
      Georg

    • #3636
      Andreas S.
      Teilnehmer

      tWPs ist die anzahhl der Waypoints die im LOC vorhanden sind

      put revXMLChildNames(pTree, "loc", return, "waypoint", false) into tWPs
      schreibt dies in die Variable tWPs (tWayPoints – Mehrzahl 😉 )

      Da hab ich meinen Denkfehler… danke…
      Na dann schau ich mal wie ich das rausbekomme…

      Merci

    • #3638
      Andreas S.
      Teilnehmer

      Ha… gelöst…

      Danke Gregor für den Denkanstoss

      private command processLOCTree pTree
         	
         local tnameid, tname, tlat, tlon, tAusgabe
         local tWPs, tLWPs
         
         put revXMLChildNames(pTree, "loc", return, "waypoint", true) into tWPs
         repeat for each line twaypoint in tWPs  
            
            put revXMLAttribute(pTree, "loc/"&twaypoint&"/name", "id") into tnameid
            put revXMLNodeContents(pTree, "loc/"&twaypoint&"/name") into tname
            put revXMLAttribute(pTree, "loc/"&twaypoint&"/coord", "lat") into tlat
            put revXMLAttribute(pTree, "loc/"&twaypoint&"/coord", "lon") into tlon
            put "Name = " & tnameid &": "& tname & return & "Coord = " & tlat &", "& tlon & return after tLWPs
            put return after tLWPs
         end repeat
            
         put tLWPs after tAusgabe
         set the text of field "text" to tAusgabe
       end processLOCTree

      Es war wirklich der denkfehler das ich die Variable „waypoint“ (jetzt twaypoint) nicht abgefragt hatte…

      Danke nochmal

    • #3640
      gfz
      Teilnehmer

      keine Ursache Andreas. Freut mich, dass ich helfen konnte.
      LG,
      Georg

Ansicht von 12 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.