Ankündigung

Einklappen
Keine Ankündigung bisher.

XML und Zeilenumbruch

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XML und Zeilenumbruch

    Hallo

    Ich wollte etwas vermeintlich Einfaches machen: Den Beginn einer xml-Datei einlesen, dann etwas aus einer DB selbst generieren, anschliessend den Schluss einer xml-Datei einlesen und alles wieder als xml-Datei speichern.

    Leider habe ich dabei ein Problem mit den Zeilenumbrüchen. Ich hab's so versucht:
    PHP-Code:
    //Den Beginn der Datei einlesen
    $text file_get_contents('data1.xml');
    $anfrage="SELECT ...";
    $ergebnis=mysql_query($anfrage);
    $anzahl=mysql_num_rows($ergebnis);
    for(
    $i=0;$i<$anzahl;$i++) {
        
    $text .= chr(13).'<cover>';
        
    $text .= chr(13).'<title>'.mysql_result($ergebnis,$i,"titel").'</title>';
        
    $text .= chr(13).'<image>'.mysql_result($ergebnis,$i,"bildname_thumb").'</image>';
        
    $text .= chr(13).'</cover>';
        }
    // einen abschliessenden Zeilenumbruch anhängen
    $text .= chr(13);
    // jetzt den Schluss der Datei anhängen
    $text .= file_get_contents('data2.xml');
    $fp fopen('data.xml''w');
    fwrite($fp$text);
    fclose($fp); 
    Die Datei data.xml wird zwar so vollständig zusammengesetzt erzeugt, aber nicht wie gewünscht: Ohne chr(13) wurde angezeigt:
    <cover><title>EinTitel</title><image>bild.jpg</image></cover>
    Ohne die Zeilenumbrüche funktionierte die xml-Datei nicht, wenn ich sie von Hand einfügte, konnte sie korrekt dargestellt werden. Also habe ich mit chr(13) die Umbrüche eingefügt und erhalte:
    <cover>
    <title>EinTitel</title>
    <image>bild.jpg</image>
    </cover>
    Damit sieht es aus, wie wenn ich die Umbrüche von Hand einfüge, aber die Datei kann trotzdem nicht gelesen werden. Als Alternative habe ich es mit chr(10) versucht und mit beiden zusammen. Das Ergebnis ist immer dasselbe: Es sieht zwar aus wie von Hand bearbeitet, funktioniert aber nicht so.

    Ich wäre für einen Tipp sehr dankbar.

    Gruss, rodaroda

  • #2
    PHP-Code:
    $text .= "\n<cover>
                  <title>" 
    mysql_result($ergebnis,$i,"titel") . "</title> 
                  <image>" 
    mysql_result($ergebnis,$i,"bildname_thumb") . "</image>
                </cover>"

    Kommentar


    • #3
      Hallo bandit600

      Danke, das hatte ich auch schon versucht. Ist aber ein Holzweg, weil das genau so in die xml-Datei geschreiben wird,also als
      \n<cover>....
      Zeilenumbrüche werden jedoch nicht geschrieben. Falls das übrigens irgendetwas zur Sache tut: PHP läuft bei mir auf Apache.

      rodaroda

      Kommentar


      • #4
        Es ist ein Unterschied, ob du
        PHP-Code:
        '\n' 
        oder
        PHP-Code:
        "\n" 
        schreibst.

        Kommentar


        • #5
          Natürlich werden Zeilenumbrüche geschrieben. Es gibt halt nur drei Arten: Linefeed (\n bzw. chr(10)) unter Linux, Carriage-Return (\r bzw. chr(13)) unter MacOS 9 und älter und die Kombination aus beidem (\r\n bzw. chr(13).chr(10)) unter Windows. Wahrscheinlich brauchst du Letzteres.
          Allerdings frage ich mich, welchen grottigen XML-Parser du da hast, wenn der Zeilenumbrüche zwischen den Tags braucht. Die Whitespace-Verteilung ist nach XML-Spezifikation vollkommen beliebig. Dein Parser höer sich irgendwie nach einer schlecht umgesetzten Eigenfrickelei an.
          Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

          Kommentar


          • #6
            Ups, sorry, das wusste ich nicht...

            Tatsächlich werden so Zeilenumbrüche geschrieben, aber nach wie vor wird bei der Weiterverarbeitung die xml-Datei nicht so behandelt, wie wenn ich die Umbrüche von Hand mit Enter einfüge.

            Kommentar


            • #7
              Jetzt hast du aber immer noch nicht gesagt, um welchen Parser es sich handelt und warum der Zeilenumbrüche braucht, um Tags parsen zu können.
              Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

              Kommentar


              • #8
                Dann spinnt dein Parser. Versuche es dann mal mit \r\n in jeder Zeile

                Kommentar


                • #9
                  Das Ups bezog ich natürlich auf ' und " ...

                  @Manko10: Danke für die Ausführung. Ich möchte die data.xml für Yet Another Coverflow Clone dynamisch generieren. (http://blog.liip.ch/archive/2008/08/...en-source.html) Ob dieses Programm die xml-Datei sauber ausliest, weiss ich natürlich nicht.
                  Ein Themawechsel wäre die Frage, ob es eine bessere open source Lösung für einen Coverflow-Clone gibt, für den ich die Bilder dynamisch einlesen kann. Was an der xls-Datei und was am Programm liegt, werde ich ja wohl kaum herausfinden.

                  Kommentar


                  • #10
                    XLS => Excel. Das hat mit XML nichts zu tun. Wahrscheinlich aber nur ein Schreibfehler und du meintest XML, ja?

                    Diese komische Coverflow-Anwendung kenne ich nicht und wenn sie schon daran scheitert, wäre das für mich schon ein Kriterium sie unter „schlechte Implementierung“ abzuheften und mir was anderes zu suchen. Solche Anwendungen sind immer prädestiniert dazu, noch mehr Probleme zu haben.
                    Wenn es diese Anwendung sein soll, dann versuche aber mal wie bereits vorgeschlagen \r\n statt nur \n or \r und dabei natürlich die Double-Quotes nicht vergessen, wie du ja gerade gelernt hast.
                    Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                    Kommentar


                    • #11
                      gibts da nix neues mehr ? .. die Implementation von Coverflow ist von 2008 , das entspricht in normaler Technologie "kurz nach dem 2ten Weltkrieg" ...
                      "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                      Kommentar


                      • #12
                        @Manko10: Ja, ich meinte natürlich xml.

                        @eagle275: Es ist das Coverflow eines Kunden, der das bisher statisch eingebaut hatte. Ich wollte das nehmen, damit die Seite so bleibt, wie sie ist, bloss dass die Bilder und Links dynamisch gelesen und zufällig angeordnet werden. Aber ich habe nun genug gepröbelt und bin mir schliesslich nicht mal mehr sicher, ob das Problem bei den Zeilenumbrüchen oder sonstwo liegt. nach Stunden von Verzeichnissen erstellen, Rechte ändern usw. habe ich keine Lust mehr, es mit dem Ding zu versuchen, und suche mir eine andere Implementation.

                        @bandit600: Ich werde mich noch weiter schlau machen bezüglich der Unterschiede von ' und ". Wenigstens habe ich da etwas gelernt.

                        Danke euch für die Hilfe.

                        Gruss, rodaroda

                        Kommentar

                        Lädt...
                        X