PHP XML mit PHP erstellen

Hallo!

Ich habe ein Problem, wo ich nicht weiterkomme. Ich möchte mittels PHP ein XML Dokument erstellen. Hierfür müssen Daten aus der DB ausgelesen werden.

Ein XML Dokument beginnt ja mit

HTML:
<?xml version="1.0" encoding="utf-8"?>

Ein PHP Dokument beginnt mit

PHP:
<?php 
// some code
?>

Wenn ich nun folgendes mache :

PHP:
<?php 
<?xml version="1.0" encoding="utf-8"?>
?>

Dann denkt PHP, dass hinter utf-8 mit dem ?> der PHP Code endet, dabei ist es ja nur der XML Teil. Wie kann ich das umgehen ?

Mein Code bis jetzt ist

PHP:
<?php
echo '<?xml version="1.0" encoding="utf-8" \?>';
mysql_conntect("localhost","user","pass");
mysql_select_db("update_city");

// Wird nicht angezeigt
for($i = 0; $i < 10;$i++ ){
  echo '
   <item>
       <title>Test</title>
   </item>
  ';
}
?>
 
PHP:
<?php
header("Content-type: text/xml; charset=utf-8");
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo "\n";
...
 
PHP:
<?php
header("Content-type: text/xml; charset=utf-8");
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo "\n";
...

Richtig. Funktioniert problemlos. Ich würde dir dennoch dazu raten XMLWriter aus der PHP-Extension libxml (per default aktiviert) zu verwenden, sofern diese vorhanden ist. Die Konkatenation von Strings kann schnell unübersichtlich werden. :)
 
Zuletzt bearbeitet:
Richtig. Funktioniert problemlos. Ich würde dir dennoch dazu raten XMLWriter aus der PHP-Extension libxml (per default aktiviert) zu verwenden, sofern diese vorhanden ist. Die Konkatenation von Strings kann schnell unübersichtlich werden. :)

Ja. Echtes XML ohne Schema zusammenzuschrauben ist eine Unsitte, das scheitert nämlich spätestens beim korrekten Escaping.
 
Ich würde ganz dezent auf DOM verweisen, da Du hier die Vielfalt hast, welche Du benötigst.

PHP:
$dom = new DOMDocument();
// nutzt der Browser sonst aber automatisch wenn nix angegeben ist
$dom->encoding = 'UTF-8';

$item = $dom->createElement('item');
$dom->appendChild($item);
$title = $dom->createElement('title');
$item->appendChild($title);
$txt = $dom->createTextNode('test');
$title->appendChild($txt);
$isSaved = $dom->save([MY PATH]);
if ( ! isSaved ) {
throw ... irgendwas
}
 
Zuletzt bearbeitet:
Ich würde ganz dezent auf DOM verweisen, da Du hier die Vielfalt hast, welche Du benötigst.

Da musst du nicht dezent drauf verweisen sondern eher lautstark. ;) Wenn man XML mit PHP verarbeitet und kein DOM nutzt, dann wird erfahrungsgemäss daraus nur Murks.

@Dawen: Du solltest dir die Grundlagen von PHP nochmal anschauen. Stelle dir PHP-Dateien als HTML-Dateien vor. Immer dann, wenn du '<?php' in dieses HTML-Dokument einbettest, bedeutet das, dass für den kommenden Code, bis zum schliessenden '?>' der PHP-Interpreter aufgerufen werden soll. Du hast also 2 Möglichkeiten. Entweder du schreibst sauberen PHP-Code, in dem alles, was als HTML/XML ausgegeben werden soll, auch als Ausgabe enthalten ist, also mittels echo() ausgegeben wird (sie Beispiel von overflow). Oder du bettest nur die dynamischen Dinge als PHP-Code in dein XML ein, indem du überall dort, wo PHP irgendwelche Operationen machen soll, einen PHP-Block in's sonst statische XML einbettest.

Code:
<?xml version="1.0" encoding="utf-8"?> 
<?php  
...PHP-Code...
?>
Weitere statische Ausgaben.
 
Oder du bettest nur die dynamischen Dinge als PHP-Code in dein XML ein, indem du überall dort, wo PHP irgendwelche Operationen machen soll, einen PHP-Block in's sonst statische XML einbettest.

Code:
<?xml version="1.0" encoding="utf-8"?> 
<?php  
...PHP-Code...
?>
Weitere statische Ausgaben.

Das fliegt dir auf Systemen mit 'short_open_tag = On' um die Ohren.

http://php.net/manual/de/ini.core.php hat gesagt.:
Bestimmt, ob die Kurzform (<? ?>) des PHP-Öffnungs-Tags erlaubt werden soll. Wenn Sie PHP in Kombination mit XML benutzen wollen, dann deaktivieren Sie diese Option, um <?xml ?> nutzen zu können. Anderenfalls können Sie das Tag mit PHP ausgeben, z.B. <?php echo '<?xml version="1.0"'; ?>.
 
Zurück
Oben