XML Daten auswählen und in Datenbank schreiben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XML Daten auswählen und in Datenbank schreiben

    Ich habe mir ein PHP Script erstellt, mit dem ich im Umkreis von 15 km einer Gemeinde von Geonames mit Georeferenzierte Wikipedia Artikel als XML Daten laden kann.

    Diese werden in einer neuen XML Datei gespeichert und dann weiter verarbeitet.

    Da bei den Gemeinden einzelne Wikipedia Artikel merfach vorkommen können, möchte ich die Artikel auswählen und in einer neuen XML Datei zusammenfassen. Wie kann ich das am besten machen.

    Ich habe mir überlegt eine Liste zu erstellen, wo ich dann einzelne Daten per Kontrollkästchen auswählen kann und diese dann in eine neue XML Datei kopiere.

    MFG Maffy
    in der ruhe liegt die kraft

  • #2
    Ich gratuliere herzlich zu dieser Idee und wünsche viel Spass bei der Umsetzung.

    (keine offenen Fragen in deinem Post)

    Kommentar


    • #3
      Typische Antwort auf eine Frage, aber das ist hier normal.
      in der ruhe liegt die kraft

      Kommentar


      • #4
        Worauf dich der 'nerd' hinweisen wollte ist, dass du eine eventuelle Lösung für dein Problem selber gefunden hast.
        Da das Thema nicht im Projekthilfe Forum ist, sieht es so aus, als ob du das selber umsetzen könntest.

        Nun ist die Frage,: wo es bei dir an der Umsetzung hapert.

        mfg

        Kommentar


        • #5
          Sorry, wenn ich so reagiere.
          Mein Problem ist es, das ich mit XML noch wenig zu tun hatte.

          Wie kann ich einzelne XML Dateien nach bestimmten Suchwörten (PLZ oder Gemeinde) durchsuchen und die Funde einzeln auswählen um diese in eine neue XML Datei zu schreiben.

          Die XML Datei die ich mit meiner Abfrage von Geonames erhalte ist so aufgebaut.

          Code:
          <?xml version="1.0" encoding="UTF-8" standalone="no"?>
          <geonames>
          <entry>
          <lang>de</lang>
          <title>Klinikum Fulda</title>
          <summary>Das Klinikum Fulda ist ein Krankenhaus der Maximalversorgung 
          und seit 1970 ein akademischer Lehrbetrieb für Medizinstudenten der 
          Philipps-Universität Marburg und seit 1999 Lehrkrankenhaus für Pflege der 
          Hochschule Fulda mit 924 Betten. Das Klinikum wurde in seiner 
          gegenwärtigen Form 1976 in Betrieb genommen und umfasst 28
          Institute und Kliniken bei einem Einzugsgebiet mit etwa 500 (...)</summary>
          <feature>landmark</feature>
          <countryCode>DE</countryCode>
          <population>0</population>
          <elevation>0</elevation>
          <lat>50.5477</lat>
          <lng>9.7054</lng>
          <wikipediaUrl>[url]http://de.wikipedia.org/wiki/Klinikum_Fulda[/url]</wikipediaUrl>
          <thumbnailImg/>
          <distance>1.7458</distance>
          </entry>
          <entry>
          </geonames>
          Und ich lade die Daten so:
          PHP-Code:

          // Xml Daten laden und anzeigen
          $daten file_get_contents("".$filename.""); // Datei einlesen
          $daten explode("<entry>" $daten); // Inhalt in ein Array zerlegen

          for ($zaehler 1$zaehler count($daten); $zaehler++) {
               
          ereg("<title>(.*)</title>" $daten[$zaehler] , $title); // Titel
          ereg("<lat>(.*)</lat>" $daten[$zaehler] , $lat); // Längen und Breitengrad
          ereg("<lng>(.*)</lng>" $daten[$zaehler] , $lng); // Längen und Breitengrad
          ereg("<summary>(.*)</summary>" $daten[$zaehler] , $summary); // Beschreibung
          ereg("<wikipediaUrl>(.*)</wikipediaUrl>" $daten[$zaehler] , $wikipediaUrl); // wikipediaUrl
              
          // Datenfelder
          $lat $lat[1];
          $lng $lng[1];
          $title utf8_decode($title[1]);
          $summary utf8_decode($summary[1]);
          $wikiUrl $wikipediaUrl[1];
              
          $link "Artikel <a href=\"".$wikiUrl."\" target=\"_blank\">lesen</a>";
                          

          Zuletzt geändert von maffy; 16.11.2008, 15:11.
          in der ruhe liegt die kraft

          Kommentar


          • #6
            Es wäre nett, wenn du dir mal unsere Regeln durchliest und deinen letzten Beitrag so umbrichst, dass wir nicht mehr bis Asien scrollen müssen.

            Was soll das: "".$filename."" ?
            Warum gehst du mit ereg() auf XML los? Dafür gibt es doch schicke Extensions wie SimpleXML.
            PLZ und Gemeinde sehe ich den XML-File nicht.

            Kommentar


            • #7
              Er soll in <titel> <summary> nach einen suchbegriff suchen.

              Leider funktioniert das bei mir nicht, weder die DomXML Funktionen, noch SimpleXML.

              Ich möchte die Daten Offline vorbereiten und dann hochspielen.

              Mfg Maffy
              in der ruhe liegt die kraft

              Kommentar


              • #8
                Ich habe mir jetzt xampp neu installiert um mit simplexml arbeiten zu können.

                Problem ist jetzt noch das er die Doppelten Daten nicht aus dem array schmeißt.

                Er soll im title Tag nach schauen und dann alle Datensätze ausgeben.

                PHP-Code:

                <?PHP

                    
                // Alle XML Dateien im Verzeichniss einlesen
                    
                $file_dir './';
                    
                $i 0;
                    
                    
                $dirhandle opendir($file_dir); // Dateien auslesen Anfang
                    
                    
                while ($file readdir($dirhandle)) {

                        if (
                preg_match('/\.(xml)$/i',$file)){
                                            
                            
                $xml_dateien[] = "".$file."";     
                        }
                    
                    }

                    
                closedir($dirhandle); // Dateien auslesen Ende
                    
                      // Alle Dateien einlesen aus $xml_dateien
                      
                for ($zaehler 0$zaehler count($xml_dateien); $zaehler++) {

                        
                $xml simplexml_load_file($xml_dateien[$zaehler]);     //Lädt die XML-Datei in ein Objekt 
                    
                        
                if($xml) {    //Prüfen, ob Datei Fehler enthielt 

                             
                foreach($xml->entry as $newdata) { 
                                
                                
                $titel utf8_decode($newdata->title);
                                
                $summary utf8_decode($newdata->summary);
                                
                $wikipediaUrl $newdata->wikipediaUrl;
                                
                $lat $newdata->lat;
                                
                $lng $newdata->lng;
                                
                                
                $xmldaten_result[] = "<div id=\"infobox\"><h1>$titel</h1>
                <p>
                $summary<hr/>Artikel bei <a href=\"$wikipediaUrl\">Wikipedia</a> 
                lesen - <b>Koordinaten:</b> 
                $lat - $lng</p></div>"
                                
                                
                asort($xmldaten_result);
                                
                array_unique($xmldaten_result);

                            }
                            
                        }
                        

                        
                // Daten ausgeben
                        
                foreach($xmldaten_result as $data){
                            print 
                "$data";
                        }

                    
                    }

                ?>
                in der ruhe liegt die kraft

                Kommentar


                • #9
                  Deine Art, die Datei(en) zu laden ist nicht verkehrt, mit glob() ginge es allerdings viel galanter.

                  sort() und array_unique() solltest du unbedingt nach der foreach-Schleife machen. Dort hat es den selben Effekt, wird aber nur einmal ausgeführt und dein Script läuft schneller.

                  Dass die doppelten Einträge nicht verschwinden, ist kein Wunder. Sie sind einfach nicht doppelt, weil mehr als nur der Titel drinsteckt. print_r($xmldaten_result) wirds dir zeigen.

                  PHP-Code:
                  foreach ($xml->entry as $newdata) {
                      
                  // ...
                      
                  $xmldaten_result[$titel] = '...';
                  }
                  sort(); 
                  Auf diese Weise brauchst du array_unique() gar nicht mehr.


                  Übrigens solltest du dich zwischen englischen und deutschen Variablennamen entscheiden.

                  Kommentar


                  • #10
                    Ok, werde ich mal so testen. Danke.
                    Mfg Maffy
                    in der ruhe liegt die kraft

                    Kommentar


                    • #11
                      Es funktioniert jetzt soweit.

                      Testseite

                      Muss ich bei PHP5 immer *.php5 als Datei Endung schreiben?

                      Bei 1und1 muss ich das wohl so schreiben, damit er das Script als PHP5 erkennt und die XML Funktionen ausführt?

                      Mfg Maffy
                      in der ruhe liegt die kraft

                      Kommentar


                      • #12
                        Muss ich bei PHP5 immer *.php5 als Datei Endung schreiben?

                        Bei 1und1 muss ich das wohl so schreiben, damit er das Script als PHP5 erkennt und die XML Funktionen ausführt?
                        Aufgrund der Serverkonfiguration bei 1&1 musst du php5 dran schreiben. Aber normalerweise reicht php aus.

                        Kommentar


                        • #13
                          Alles klar.

                          Als nächstes werd ich mal versuchen das ganze noch mit einer google maps Karte zu verknüpfen.

                          Mfg Maffy
                          in der ruhe liegt die kraft

                          Kommentar


                          • #14
                            Ich habe jetzt mal eine Karte erstellt.

                            Google Map Karte

                            Das Problem ist jetzt noch das es ziemlich lang dauert bis er die Daten lädt.

                            Wie kann ich noch ein Info DIV über der Karte anzeigen mit "bitte Warten" während er die die Marker lädt.

                            Mfg Maffy
                            in der ruhe liegt die kraft

                            Kommentar

                            Lädt...
                            X