XML in eine php Datei

kekskruemel

Angesehenes Mitglied
Hallo,

ich habe eine php Datei. Diese greift zu erst auf eine übertragene PLZ zu und sucht dann PLZ im Umkreis. Diese wiederrum werden abgefragt in der Datenbank und anschließend die entsprechenden Daten dazu ausgegeben.

Die Ausgabe der Daten soll dann in der php Datei als xml erfolgen.

Nun mache ich diese Ausgabe als xml das erste mal und stoße auch gleich auf ein paar Fragen und Probleme.

1. kann ich überhaupt eine php Datei so gestalten, dass Sie trotz der Endung php XML Formatierungen ausgibt oder müsste die Datei eher eine xml sein (und auch als diese aufgerufen werden) und php Codes enthalten?

2. Ich habe den ersten Versuch nun als php Datei mit Ausgaben als xml gemacht und die Ausgabe sieht leider gar nicht aus wie xml
QUOTE JetL�btauer Str. 51-5501159Dresden1.6191.5191.5591.559GOTharandter Str. 4801159Dresden1.5591.5591.6191.5190.7291.519TotalKesselsdorfer Str. 21401169Dresden1.6391.5391.5791.579TotalWiener Str. 3901069Dresden1.6591.5491.5991.599AralBergstr./Ecke S�dh�he01217Dresden1.5491.5491.4991.6891.599JETPeschelstra�e 3601139Dresden1.6191.5191.5591.559


Der Code hierzu:

CODE <?php
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Pragma: no-cache');
header('Cache-Control: no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0');
header('Content-Type: text/xml; charset=UTF-8');
$content = "<?xml version='1.0' encoding='UTF-8'?>\n";
$content .= '<results>';

// natürlich erst eine Verbing zur Datenbank aufbauen!



// die PLZ nach der wir suchen
$plz = $_GET['q'];
// der Umkreis in Km
$umkreis = $_GET['r'];
// Kraftstoff
$kraftstoff = $_GET['k'];
//Land
$land = $GET['l'];

$sql_rad = mysql_query("SELECT laenge, breite FROM plz WHERE plz = '$plz' ");
$erg_rad = mysql_fetch_object($sql_rad);

//Umkreisberechnung entfernt für Übersichtlichkeit - Ausgabe: PLZ der Umgebung

$sql = mysql_query($query);
while( $erg = mysql_fetch_object($sql) )
{
$plzra=$erg->plz;

// Suche der Tankstellen in diesen PLZ aus der Umgebung
$qu_tank = "SELECT *, FROM_UNIXTIME(preis_update, \"%Y-%m%-%d\") AS datum FROM tankstellen LEFT JOIN preise ON preis_tank = tank_id WHERE preis_wert != 0 AND preis_aktiv != 0 AND tank_land='".@$_GET['l']."' AND tank_plz=".$plzra." GROUP BY tank_id";

   $qu_sq   = mysql_query($qu_tank) or die(mysql_error());
while( $ds = mysql_fetch_object($qu_sq) )
{
       $content .= "<entry>";
  $content .= "<name>".$ds->tank_name."</name>";
       $content .= "<adresse>".$ds->tank_adr."</adresse>";
       $content .= "<plz>".$ds->tank_plz."</plz>";
       $content .= "<stadt>".$ds->tank_stadt."</stadt>";      
     //Ausgabe der einzelnen Tankstellen

$qu_tank2 = "SELECT *, FROM_UNIXTIME(preis_update, \"%Y-%m%-%d\") AS datum FROM tankstellen LEFT JOIN preise ON preis_tank = tank_id WHERE preis_wert != 0 AND preis_aktiv != 0 AND tank_land='".@$_GET['l']."' AND tank_plz=$ds->tank_plz AND tank_id=$ds->tank_id ";

//Suche der Preise zur aktuellen Tankstelle

$qu_sq2   = mysql_query($qu_tank2) or die(mysql_error());
while( $ds2 = mysql_fetch_object($qu_sq2) )
{
       
       if ($ds2->preis_type=1)
       {$preis_typ="super";}
       if ($ds2->preis_type=2)
       {$preis_typ="benzin";}
       if ($ds2->preis_type=3)
       {$preis_typ="diesel";}
       if ($ds2->preis_type=4)
       {$preis_typ="superplus";}
       if ($ds2->preis_type=5)
       {$preis_typ="superdiesel";}
       if ($ds2->preis_type=6)
       {$preis_typ="lkwdiesel";}
       if ($ds2->preis_type=7)
       {$preis_typ="biodiesel";}
       if ($ds2->preis_type=8)
       {$preis_typ="autogas";}
               if ($ds2->preis_type=9)
       {$preis_typ="erdgas";}
               if ($ds2->preis_type=10)
       {$preis_typ="e50";}
               if ($ds2->preis_type=11)
       {$preis_typ="e85";}
               if ($ds2->preis_type=12)
       {$preis_typ="pflanzenoel";}

 $content .= "<".$preis_typ.">".$ds2->preis_wert."</".$preis_typ.">";
 
}
 $content .= "</entry>";

 
}

}
$content .= '</results>';
printf ($content);
?>


Alle Ergebnisse werden ausgeben, nicht jedoch in den XML <name>blabla</name>
 
QUOTE (kekskruemel @ Sa 12.07.2008, 08:34)1. kann ich überhaupt eine php Datei so gestalten, dass Sie trotz der Endung php XML Formatierungen ausgibt oder müsste die Datei eher eine xml sein (und auch als diese aufgerufen werden) und php Codes enthalten?


Was interessieren bei Xml Formatierungen? Das


QUOTE (kekskruemel @ Sa 12.07.2008, 08:34)
QUOTE JetL�btauer Str. 51-5501159Dresden1.6191.5191.5591.559GOTharandter Str. 4801159Dresden1.5591.5591.6191.5190.7291.519TotalKesselsdorfer Str. 21401169Dresden1.6391.5391.5791.579TotalWiener Str. 3901069Dresden1.6591.5491.5991.599AralBergstr./Ecke S�dh�he01217Dresden1.5491.5491.4991.6891.599JETPeschelstra�e 3601139Dresden1.6191.5191.5591.559




sieht doch schon von der Tendenz her ok aus. Wenn das die Browseransicht ist und Du da in den Quellcode siehst, dann sind da wahrscheinlich alle Xml-Elemente vorhanden.

Sprich: Das scheint aktuell lediglich ein Problem des Clientbrowsers zu sein, der Content mit der Endung PHP nicht als Xml-Dokument darstellt. Für die Anwendung ist das aber uninteressant - weil der Xml-Output ja ohnehin direkt gelesen und weiterverarbeitet wird.

Ansonsten schick mal eine Url.
 
du hast recht. Ich habe mir den Quelltext im Browser (Safari) einmal angeschaut. Da stehen diese <name> drin.

Bedeutet dies, dass jemand, der nun diese Daten beziehen möchte um diese in seine php Datei zu importieren auch verwenden kann?

Wie kann ich die Sache mit den ü, ä ö Lösen? Ich sollte ja, wie ich gelesen habe, bei einer xml schon utf8 verwenden oder kann ich auch anderes nutzen?


 
QUOTE (kekskruemel @ Sa 12.07.2008, 10:59)Bedeutet dies, dass jemand, der nun diese Daten beziehen möchte um diese in seine php Datei zu importieren auch verwenden kann?


Im Prinzip ja.

Speichere die Datei mal mit der Endung .xml ab und öffne sie wieder im IE/FF. Wenn dann nicht gemeckert wird, dann sollte die Datei ein wohlgeformtes Xml-Dokument sein. Das ist Voraussetzung für ein Weiterverarbeiten.


QUOTE (kekskruemel @ Sa 12.07.2008, 10:59)Wie kann ich die Sache mit den ü, ä ö Lösen? Ich sollte ja, wie ich gelesen habe, bei einer xml schon utf8 verwenden oder kann ich auch anderes nutzen?


Am einfachsten als UTF-8 - Datenstrom generieren. Dann können beliebige Umlaute / Sonderzeichen enthalten sein.

Theoretisch (das ist ja wohl ISO-8859-1) kann man das auch in den Xml-Prolog schreiben:


CODE <?xml version='1.0' encoding='ISO-8859-1'?>


Praktisch sollte man schon seit Jahren keine Ein-Byte-Zeichensätze mehr verwenden. Also als UTF-8 mit Prolog


CODE <?xml version='1.0' encoding='UTF-8'?>


oder die Encoding-Declaration weglassen, weil UTF-8 ohnehin Standard ist.
 
ich habe die Datei in xml umbenannt und folgender Fehler:
QUOTE error on line 10 at column 51: Document is empty


CODE <?php
//error_reporting(E_ALL);
//ini_set('display_errors',1);
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Pragma: no-cache');
header('Cache-Control: no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0');
header('Content-Type: text/xml; charset=UTF-8');
$content = "<?xml version='1.0' encoding='UTF-8'?>\n";

$content .= '<results>';

// natürlich erst eine Verbing zur Datenbank aufbauen!



Zeile 10 ist hier die Definition: $content = "<?xml version ....



 
QUOTE (kekskruemel @ Sa 12.07.2008, 13:22)ich habe die Datei in xml umbenannt und folgender Fehler:

Aber doch nicht die PHP-Datei auf deinem Server.

Die muß PHP bleiben, auf daß der Code ausgeführt wird.

Das, was Du dir in deinem Safari angeguckt hast, das lokal speichern und als .xml umbenennen.
 
QUOTE (kekskruemel @ Sa 12.07.2008, 14:22)ich habe die Datei in xml umbenannt und folgender Fehler:

QUOTE error on line 10 at column 51: Document is empty


CODE <?php
header('Content-Type: text/xml; charset=UTF-8');
$content = "<?xml version='1.0' encoding='UTF-8'?>\n";




Zeile 10 ist hier die Definition: $content = "<?xml version ....

Wenn du die .php einfach umbenennst, dann geht es ja nicht mehr durch den PHParser .....

lass es .php
und ändere mal den headerBefehl
xml ist nähmlich irgendwie kein "text" sondern "Programm"

CODE
<?php

header("Content-type: application/xml; charset=iso-8859-1");
echo("<?xml version='1.0' encoding='ISO-8859-1' ?>
<rss version='2.0'
xmlns:content='http://purl.org/rss/1.0/modules/content/'
xmlns:wfw='http://wellformedweb.org/CommentAPI/'
>



du willst das es als domain.tld/rss.xml aufgerufen werden kann


.htaccess

CODE
RewriteEngine ON

RewriteRule (.*)rss\.xml$ /rss.php


ähm, oder

CODE
RewriteEngine ON

RewriteRule rss\.xml /rss.php


oder

CODE RewriteRule ^rss\.xml /rss.php

und deine .php hat den Namen rss.php
so mach ich es auf 800xe.de
meine htaccess

CODE RewriteRule (.*)\.xml$ /?rss=$1

+ index.php

CODE
if ( $_GET['rss'] )
$_SERVER['REQUEST_URI']=str_replace('.xml','.html',$_SERVER['REQUEST_URI']);



 
QUOTE lass es .php
und ändere mal den headerBefehl
xml ist nähmlich irgendwie kein "text" sondern "Programm"


leider falsch es ist text und der korrekte header ist text/xml
 
QUOTE (blubdiblub @ So 13.07.2008, 07:42)leider falsch es ist text und der korrekte header ist text/xml

Leider ist das falsch.

Genaueres findet sich unter http://www.w3.org/TR/xhtml-media-types/

Es gibt für Xml mehrere Möglichkeiten für den Content-Type. text/xml ist nur eine davon.

<ot>
Aber schön sind doch hier die google-Anzeigen:

*
Autogas Umbau Berlin
Qualität mit Zufriedenheitsgarantie Über 1000 Autos umgerüstet
www.autogastanken24.de
*
Autogas Tankstellen
Jetzt auf Autogas umrüsten und sofort für die Hälfte tanken!
www.autogas-berlin24.de
*
CMS einfach einfach
Desktop Look & Feel im Browser J2EE basiertes Enterprise CMS
www.innovationgate.de

thematisch passend.
tongue.gif


</ot>
 
Zurück
Oben