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.