XML per Header ausgeben --> Fehler

fungo

Erfahrenes Mitglied
Ich generiere aus einer Datenbank eine XML per DOMXML, aber wie man sieht, ergibt das einen Fehler not-wellformed, siehe http://www.homeproduction.org

Mein Code:

PHP:
<?php

require_once('include/DBConnection.class.php');

$con = new DBConnection();
$doc = domxml_new_doc("1.0");

$root = $doc->create_element('root');
$root = $doc->append_child($root);


$result = $con->Query("SELECT * FROM box");

while($row = $con->fetchAssoc($result)) {

         $node = $doc->create_element('box');
         $node = $root->append_child($node);

               foreach ($row as $fieldname => $fieldvalue) {
                    $child = $doc->create_element($fieldname); 
                    $child = $node->append_child($child);
                    $value = $doc->create_text_node($fieldvalue); 
                    $value = $child->append_child($value);
               }

}

$xml_string = $doc->dump_mem(true);

header("Content-type: text/xml");

echo $xml_string;

?>

Habe schon alles ausprobiert, kann aber meinen Fehler nicht finden.
 
Zuletzt bearbeitet:
Theretisch solltest Du noch das Encoding einstellen.
Der IE ist da toleranter, Mozilla aber sehr, sehr strikt.

Code:
<?xml version="1.0" encoding="iso-8859-15"?>


Bei Dir steht nur:
Code:
<?xml version="1.0"?>
vermutlich moniert das die Mozilla-Engine.
 
Das mit dem Einrücken ist mir schon klar, ich programmiere schon ein paar Jährchen... ja ich weiß auch nicht, IE ist einfach zu tolerant, aber den Fehler des Mozillas kann ich auch nicht so richtig deuten.
Das Problem ist nur ich weiß nicht, wie ich das encoding da noch einbauen soll, denn das ist in der Funktion nicht vorgesehen.

Es hat übrigens sehr wohl was mit php zu tun, denn wenn ich den Inhalt als statische XMML anlege und mit Firefox usw. betrachte, funktioniert es einwandfrei!

http://www.homeproduction.org/test.xml
 
Zuletzt bearbeitet:
Schau mal bitte ob in der Datei in der sich der PHP-Code befindet eine leerzeile über dem <?php ist.
Der PHP-Code an sich sollte ok sein (hab ihn nicht ausprobiert).
 
Versuch mal folgendes. Ich habe bloss die Entfernung aller Carriage Returns per str_replace() eingefügt. Das könnte Dein Problem lösen - zumindest bis Du die genaue Ursache gefunden hast.

PHP:
<?php

require_once('include/DBConnection.class.php');

$con = new DBConnection();
$doc = domxml_new_doc("1.0");

$root = $doc->create_element('root');
$root = $doc->append_child($root);


$result = $con->Query("SELECT * FROM box");

while($row = $con->fetchAssoc($result)) {

         $node = $doc->create_element('box');
         $node = $root->append_child($node);

               foreach ($row as $fieldname => $fieldvalue) {
                    $child = $doc->create_element($fieldname);
                    $child = $node->append_child($child);
                    $value = $doc->create_text_node($fieldvalue);
                    $value = $child->append_child($value);
               }

}

$xml_string = $doc->dump_mem(true);

header("Content-type: text/xml");

$xml_string = str_replace("\r",'',$xml_string);
echo $xml_string;

?>
 
Zuletzt bearbeitet:
fungo hat gesagt.:
Das mit dem Einrücken ist mir schon klar, ich programmiere schon ein paar Jährchen... ja ich weiß auch nicht, IE ist einfach zu tolerant, aber den Fehler des Mozillas kann ich auch nicht so richtig deuten.
Das Problem ist nur ich weiß nicht, wie ich das encoding da noch einbauen soll, denn das ist in der Funktion nicht vorgesehen.

Es hat übrigens sehr wohl was mit php zu tun, denn wenn ich den Inhalt als statische XMML anlege und mit Firefox usw. betrachte, funktioniert es einwandfrei!

http://www.homeproduction.org/test.xml

Ja und warum haste dann nich von anfang an gleich richtig eingerückt?...

Ansonsten speichere mal die Datei die du vom Script bekommst und gucks dir im Hexeditor an ob da nich noch irgnedein Sonderzeichen rumhängt was da nich hingeöhrt.
 
Zurück