Antot: Leerzeichen von Anfang eines xml Objekt entfernen

Hallo zusammen,

in einer Datei wird ein XML-Objekt erstellt, dieser enthält am Anfang eine Leerzeile, dies möchte ich entfernen. Ruft FirfeFox, Version 38.2.0 ESR, wird folgende Fehlermeldung ausgegeben:

XML- oder Text-Deklaration nicht am Beginn der Entität
<?xml version="1.0" encoding="UTF-8"?>

Die ausgeben XML-Datei beginnt folgend, als erstes eine Leerzeile:


<?xml version="1.0" encoding="UTF-8"?>
<phrases>
 	<phrase name="about.copy"><![CDATA[Copyright &copy; $1. Alle Rechte vorbehalten.]]></phrase>

Chrome und IE macht diese Leerzeile nichts aus, sie arbeiten Einwand frei.

Codeausschnitt:

$xml = new vB_AJAX_XML_Builder($vbulletin, 'text/xml');
$xml->add_group('phrases');
foreach ($vbphrase AS $key => $phrase)
{
	$xml->add_tag( 'phrase', $phrase, array( 'name'  => $key,) );
}
$xml->close_group('group');
$xml->print_xml();
  1. Tach!

    in einer Datei wird ein XML-Objekt erstellt, dieser enthält am Anfang eine Leerzeile, dies möchte ich entfernen.
    Chrome und IE macht diese Leerzeile nichts aus, sie arbeiten Einwand frei.

    Fehlt hier nicht noch ein Teil der Fragestellung?

    $xml->print_xml();

    Gibt es eine Möglichkeit, das XML nicht direkt auszugeben, sondern erstmal als bearbeitbaren String zu bekommen? Dann ein trim() anwenden und weg sind die Whitespaces außendrumherum.

    dedlfix.

    1. Moin!

      $xml->print_xml();

      Gibt es eine Möglichkeit, das XML nicht direkt auszugeben, sondern erstmal als bearbeitbaren String zu bekommen? Dann ein trim() anwenden und weg sind die Whitespaces außendrumherum.

      dedlfix.

      Genau so. Allerdings würde ich dazu neigen schon die Klasse passend umzubauen. Das heisst, wenn dem nichts entgegen steht, z.B. die Updatefähigkeit, es geht ja wohl (da nehme ich mal frech aus dem Name der Klasse) um Fertigsoftware, hier vBulletin oder wie das Zeug heisst.

      Die Klasse vB_AJAX_XML_Builder muss ja irgend wo her kommen. Also gibts wahrscheinlich ein include oder require (-once) in dem die Klasse gebaut wird. Darin die Methode print_xml() suchen und wie von dedlfix gesagt ändern.

      Und wenn man das getan hat, dem Hersteller der Software bzw. Bibliothek die eigene Änderung ganz freundlich aufzwingen, z.B. durch einen Bugreport.

      Jörg Reinholz

  2. Tach!

    in einer Datei wird ein XML-Objekt erstellt, dieser enthält am Anfang eine Leerzeile, dies möchte ich entfernen.

    Eine andere Möglichkeit könnte sein, dass die Whitespace-Zeichen außerhalb von <?php ?> stehen. Wenn ein ?> am Ende einer Datei steht, kann und sollte man es weglassen, damit sich danach keine Whitespace-Zeichen einschmuggeln.

    dedlfix.

    1. Moin!

      Eine andere Möglichkeit könnte sein, dass die Whitespace-Zeichen außerhalb von <?php ?> stehen.

      Genau Richtig! Zu suchen in der eigentlichen Datei, aber auch in allen Biblioteken / Includes. In letzteren mit Hinblick auf das Problem des TO nicht nur am Anfang, sondern auch am Ende. Und wie dedlfix auch ausführt: da schließende ?> sollte man genau zur Vermeidung derartiger Probleme bei Biblioteken / Includes stets weglassen.

      Jörg Reinholz

  3. @@Antot

    Die ausgeben XML-Datei beginnt folgend, als erstes eine Leerzeile:

    Dann ist es keine XML-Datei.

    Regel Nr.1 (gefolgt von 22, 23): In XML darf vor der XML-Deklaration (wenn eine solche vorhanden ist) nichts stehen, auch kein Whitespace.

    Der Firefox verhält sich also korrekt, bei einem fatalen Fehler ist die weitere Verarbeitung einzustellen.

    Chrome und IE macht diese Leerzeile nichts aus, sie arbeiten Einwand frei.

    AFAIS tun sie das nicht. Sie mögen so arbeiten wie du es gern hättest, aber einwandfrei ist was anderes.

    LLAP 🖖

    --
    Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
    1. Hi,

      wie schon Jörg erkannt hat, ja, es handelt sich um eine Datei aus dem vbulletin Forum , in diesem Fall um die Version 4.2.2, die Editordatei: ckeditor.php

      Euren Vorschlag habe ich umgesetzt, alle Leerzeilen aus der Datei entfernt, auch alle Leerzeichen am Ende der Zeilen entfernt, leider hat es nicht geholfen, der Fehler wird nach wie vor angezeigt.

      Danke für Eure Anmerkung. Schönes Wochenende.

      1. Moin!

        wie schon Jörg erkannt hat, ja, es handelt sich um eine Datei aus dem vbulletin Forum , in diesem Fall um die Version 4.2.2, die Editordatei: ckeditor.php

        Du musst in allen inkludierten Dateien nach solchen suchen, die mit einer Leerzeile beginnen. Oder eben nachschauen, ob die Methode print_xml () die Leerzeile selbst erzeugt. bzw. ob es einen Ersatz im Sinne von

        print trim($xml->get_xml());
        

        gibt.

        Jörg Reinholz

        1. Hi Jörg,

          danke für den Tipp. Fehler habe ich gefunden, das Forum wird eingebunden in ein CMS, um den ensprechenden Header "auszugeben". Eine CMS Datei hatte am Ende Leerzeilen, wurden die Entfernt, ist der Fehler verschwunden. Damit wäre mein Problem erledigt.