xml Zeilenumbruch

luchs3

Erfahrenes Mitglied
Hi,

Ich möchte aus einer Datenbankabfrage ein XML-Dokument erstellen.
Das funktioniert soweit auch, da ich aber meines Wissens in XUL Templates nur auf die Attribute zugreifen kann, habe ich das ganze wie unten gelöst.
Leider schreibt er mir die einzelnen Tags in eine Zeile und gibt mir bei Zeichen 3389 eine Fehlermeldung bezüglich eines nicht geschlossenen Tags.
Hat jemand eine Ahnung wie man hier vorgehen könnte?

PHP:
$XMLDoc = new SimpleXMLElement("<?xml version='1.0' standalone='yes'?><adatadrs></adatadrs>");

header("Content-Type: application/xml");

while($dbrow = odbc_fetch_object($exec1)) {

    $xmlrow = $XMLDoc->addChild("row");
         
    $n = 1;
    foreach($dbrow as $Spalte => $Wert)
        $xmlrow->addAttribute($Spalte, $Wert);
}
 
echo $XMLDoc->asXML();
 
Nabönd, Empfehlung von mir: fürs Erstellen von XML-Dokumenten lieber DOM benutzen, das sähe dann in etwa so aus:
PHP:
header("Content-Type: application/xml");

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;

$adatadrs = $dom->appendChild($dom->createElement('adatadrs'));

while($dbrow = odbc_fetch_object($exec1))
{
  $row = $adatadrs->appendChild($dom->createElement('row'));

  foreach($dbrow as $spalte => $wert)
  {
    $row->appendChild($dom->createAttribute($spalte))
        ->appendChild($dom->createTextNode($wert));
  }
}

echo $dom->saveXML();
Vorteilhaft bei dieser Lösung ist, dass du die volle Kontrolle über die XML-Struktur hast, ausserdem kann mittels "formatOutput" eine gut formatierte Ausgabe erzeugt werden. Einfach mal ausprobieren, vielleicht löst das dein Problem, ansonsten natürlich error_reporting(E_ALL | E_STRICT) und ini_set('display_errors', true); einbauen, um eventuelle Fehler zu erkennen.

EDIT: Die richtige Funktion für Attribute erstellen ist "$dom->createAttribute()"
 
Zuletzt bearbeitet:
klingt super, aber das haut nicht ganz hin.

Code:
Call to undefined method DOMDocument::createAttributeNode()

Da ich mich mit DOM in PHP noch nicht beschäftigt habe, stehe ich ziemlich Ahnungslos da.

Aber denken und nachschauen hilft!
createAttribute() war es.

Sehr well formed.

Eine Allgemeine Frage hätte ich aber noch.
Meines Wissens nach kann ein XUL- Template nur auf Attribute und nicht auf den Inhalt der Tags zugreifen.
Ist das eine zulässige Datenübergabe, oder sind die Attribute für etwas anderes gedacht?
 
Zuletzt bearbeitet:
Hi, hatte mich da vertan, es ist natürlich createAttribute().

Bei der Sache mit XUL kann ich dir leider nicht weiterhelfen, da ich keine Ahnung davon habe.
 
Zurück