Externes XML auslesen und in MySql DB speichern

nafets

Mitglied
Hallo

Ich versuche seit langem ein XML in eine MySQL zu speichern. Hier meine Ausgangslage. Es handelt sich um das aktuelle Kinoprogramm welches jede Woche vom Hauptsystem (Rechner im Haus) erstellt wird. Dieser erstellt dann ein XML-File mit allen benötigten Daten.

Nun möchte ich diese Daten gerne auf dem externen Webserver verwenden (Hompage). Dazu sollte ich die Daten in meiner MySQL DB speichern können, damit ich diese so verwenden und darstellen kann wie ich möchte. Aber ich kriegs einfach nicht hin. Habe schon diverse Parser und sonstige Codeschnispel aus google etc. ausprobiert. Kommen immer wieder Fehler wegen Zugriff etc.

Nun ich bin voll neu im XML-Land und stehe daher voll auf dem Schlauch. Kann mir bitte jemand einen einfach Ansatz geben wie ich das anstellen muss?

Hier mal der Link zum XML
http://ticketonline.sterk.ch/seatplan/192.168.207.15_2603_100008_shows.xml

Also nochmals zum das klarstellen. Wie kann ich jetzt diese XML, auf welches ich auch nur so zugreifen kann auf einem externen Webserver mit PHP in eine MySQL DB speichern?

Vielen Dank im Voraus für eure Inputs.

Gruss
 
Hi,

Habe schon diverse Parser und sonstige Codeschnispel aus google etc. ausprobiert. Kommen immer wieder Fehler wegen Zugriff etc.

Nun ich bin voll neu im XML-Land und stehe daher voll auf dem Schlauch. Kann mir bitte jemand einen einfach Ansatz geben wie ich das anstellen muss?

na ja, ich fürchte, das wird dann wieder nur ein Codeschnipsel, der Dir nicht hilft. Hier weiß ja niemand, was Du schon probiert hast. Vielleicht postest Du einfach mal Deinen eigenen Ansatz und beschreibst, welche Probleme dabei auftreten.

LG
 
Hallo

Ja leider habe ich nicht viel bzw. einen grossen Teil schon wieder gelöscht, da ich das Thema beiseite gelegt hatte und es ja nicht funktionierte. Nun möchte ich es aber doch noch umsetzen.

Ich brauche einfach mal einen Ansatz oder ein Muster wie so was geht. Ich versuche es natürlich weiterhin via Google aber vielleicht machts mir ja jemand etwas einfacher.
 
Wie du an das XML kommst sollte mit den Stichworten "php rss feed auslesen" groß und breit erklärt werden.

Und genau so wirst du auch Beispiele zu einen XML-Parser für PHP finden können. :)

Wenn du ein konkretes Problem hast, können wir dir gerne weiterhelfen. Nur können wir nicht die ganze Funktionsweise erklären, damit du weisst wie man so etwas umsetzt und wonach du suchen musst.
 
Hi,

dann beschreib uns doch mal, welcher Teil der Aufgabe denn überhaupt Probleme bereitet. Wie Du Daten in eine MySQL-DB schreibst, weisst Du? Wie Du die Daten vom Server holen kannst, weisst Du? Ist nur das Parsen des XMLs ein Problem?

Habe schon diverse Parser und sonstige Codeschnispel aus google etc. ausprobiert. Kommen immer wieder Fehler wegen Zugriff etc.

Haben Deine bereits getesteten Parserlösungen vielleicht nur das Problem, dass das Abholen der Daten wegen Deiner Serverkonfiguration nicht funktioniert? Dann könnte eventuell Dennis' HTTP-Klasse helfen.

Starte doch einfach nochmal einen Versuch und poste hier die Probleme, die dabei auftauchen.

LG
 
Hallo

Schon mal Danke für eure Inputs. Habe was hinbekommen was meinen Bedürfnissen entspricht. Allerdings musste ich dazu das XML lokal auf meinem Webserver speichern, aber ich möchte diesen Schritt auch noch automatisieren indem er das File direkt von einem andere Server liest. Ähnlich RSS

Hier mal mein Code für das auslesen der XML-Elemente die ich benötige und in der MySQL DB speichere.

PHP:
<?php
include("../inc/conx.php");

// ################### //
// ## 				## //
// ##	KINO ELITE	## //
// ##				## //
// ################### //
// ################### //

$xml = simplexml_load_file("100008_shows.xml");

// Anzahl Shows bestimmen
$zahl = count($xml->Show);

// For Schleife anhand der gezählten Elemente und diese dann jeweils in die DB schreiben
// Alle Einträge auslesen, damit wir für die Darstellung alle Spieldaten haben, ebenfalls bei Spezialanlässen, 
// falls eine Vorstellung verschoben wird oder ausfällt.

	// Zuerst alle bestehenden Einträge löschen (jede Woche neu, so bestimmt keine alten Einträge vorhanden)
	mysql_query("TRUNCATE TABLE programm")
	or die(mysql_error());
	
for($i = 0; $i < $zahl; $i++)
    {
    // Die benötigten Elemente aus dem XML in Variablen speichern
    $myFilmtitel = $xml->Show[$i]->EventName;
    $myStartzeit = $xml->Show[$i]->ShowTime;
    $mySpieltag =  $xml->Show[$i]->ShowDate;
    $myKino = 	   $xml->Show[$i]->AuditoriumName;
    $mySprache =   "folgt"; //$xml->Show[$i]->Languageversion;
		
	// Neue Einträge in Datenbank schreiben
	mysql_query("INSERT INTO programm(filmtitel, startzeit, spieltag, kino, sprache) 
	VALUES('". $myFilmtitel ."', 
	'". $myStartzeit ."', 
	'". $mySpieltag ."', 
	'". $myKino ."', 
	'". $mySprache ."') ")
	or die(mysql_error());
		
    }
	echo "Einträge gespeichert";

?>

Versuche ich das File direkt via Link zu öffnen kommt folgende Fehlermedlung:
failed to open stream: no suitable wrapper could be found in /xml.php on line 11

Wenn mit jetzt noch jemand mit dem externen file helfen kann ... Juhuuuu :)

Gruss
 
Zuletzt bearbeitet:
Hi,

das wird an Deinen Servereinstellungen liegen (allow_url_fopen). Du könntest aber, wie bereits erwähnt, Dennis' HTTP-Klasse verwenden, um die Daten vom Server zu holen. Dazu lädst Du Dir die Klasse runter, nimmst die benötigte tcpconnection-Klasse auch gleich mit, bindest die ein und machst dann statt simplexml_load_file() ungefähr Folgendes:

PHP:
$http=new httpconnection("ticketonline.sterk.ch");
$data=$http->get("seatplan/192.168.207.15_2603_100008_shows.xml");
$xml = simplexml_load_string($data['body']);

LG
 
Coole Sache

Danke vielmals. Habe es soeben ausprobiert und es funktioniert einwandfrei. Ich merke keinen Unterschied zu den lokal geladenen XML-Files. Nur dass ich jetzt nicht jede Woche zuerst die Files manuelle herunterkopieren muss.

Jetzt noch vernünftig darstellen und den Cronjob machen - fertig ist das wöchentliche Kinoprogramm!!

Danke Danke.

Liebe Grüsse
 
Hallo nochmals

So weit so gut. Allerdings bin ich noch auf einen Stolperstein gestossen.
Ich habe noch ein weiteres XML File, dass ich einlesen und speichern muss. Das klappt mit dem oben erarbeiteten Code, allerdings kann ich ein Element nicht auslesen bzw. ich weiss nicht wie ich da drauf zugreifen soll.

Code:
<Event Name="Duplicity">

Normal greife ich ja auf die unterelemente wie z.B.
Code:
<EventID>12345</EventID>
zu. Aber wie kann ich das oben auslesen?

Die Unterobjekte spreche ich ja so an:
PHP:
$myEvent =	   $xml->Event[$i]->EventID;

Habe schon diverse Möglichkeiten probiert, aber funktioniert nichts, leider.
 
Hi,

da müsstest Du Dich mal etwas in XPath einarbeiten.
Alle Event-Elemente mit dem Namen "Duplicity" im Dokument würdest Du z.B. so bekommen:

PHP:
$events = $xml->xpath('//Event[@Name="Duplicity"]');

LG
 
Zurück