Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
XML Daten auswählen und in Datenbank schreiben [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-consult PHP Entwicklung
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
XML Daten auswählen und in Datenbank schreiben


 
maffy
15-11-2008, 10:54 
 
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

 
onemorenerd
15-11-2008, 13:58 
 
Ich gratuliere herzlich zu dieser Idee und wünsche viel Spass bei der Umsetzung.

(keine offenen Fragen in deinem Post)

 
maffy
15-11-2008, 18:37 
 
Typische Antwort auf eine Frage, aber das ist hier normal.

 
Blackgreetz
15-11-2008, 18:43 
 
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

 
maffy
16-11-2008, 11:18 
 
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.


<?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>http://de.wikipedia.org/wiki/Klinikum_Fulda</wikipediaUrl>
<thumbnailImg/>
<distance>1.7458</distance>
</entry>
<entry>
</geonames>


Und ich lade die Daten so:


// 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>";

}

 
onemorenerd
16-11-2008, 15:43 
 
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.

 
maffy
16-11-2008, 16:09 
 
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

 
maffy
19-11-2008, 15:51 
 
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

// 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";
}


}

?>

 
onemorenerd
19-11-2008, 22:46 
 
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.

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. ;)

 
maffy
20-11-2008, 12:25 
 
Ok, werde ich mal so testen. Danke.
Mfg Maffy

 
maffy
20-11-2008, 14:06 
 
Es funktioniert jetzt soweit.

Testseite (http://www.der-rhoen-fuehrer.info/test/googelmaps/index.php5)

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

 
PHP-Desaster
20-11-2008, 14:08 
 
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.

 
maffy
20-11-2008, 15:00 
 
Alles klar.

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

Mfg Maffy

 
maffy
21-11-2008, 21:08 
 
Ich habe jetzt mal eine Karte erstellt.

Google Map Karte (http://www.der-rhoen-fuehrer.info/test/googelmaps/map.php)

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:46 Uhr.