Andreas Schmitt: Preformatierter Text UND autom. Zeilenumbruch

Hallo Self'ler - 2. Versuch zu diesem -> Thema
beim 1. ist wohl mein Problem nicht ganz deutlich geworden - und der Thread ist schon (!?) archiviert (22.02.02).

Also, in einer Tabellenzelle soll Text aus einer Datenbank (über ein XML-file) ausgegeben werden, der Zeilenumbrüche und evtl. auch Tabs und mehrere aufeinander folgende Blanks enthält. Meines Wissens ist es doch eine Funktion des jeweilige Browser (da HTML-Standard), alle aufeinanderfolgenden (auch einzelne) Leerzeichen durch ein Blank zu ersetzen. Hierbei sind Leerzeichen auch Tabs und Zeilenumbrüche! Dies zu unterdrücken, also den Text "wie eingegeben" auszugeben ist anscheinend nur mittels pre-tag (oder eines Vorgängers desselben) möglich; oder durch massive stringoperationen, die in xsl aber sehr umständlich sind.
Bei Verwendung des pre-tags werden bei der Ausgabe aber auch keine dynamischen Zeilenumbrüche mehr eingefügt... jetzt könnte man sagen, das ist eben "wie eingegeben" - aber die Eingabemaske der Datenbank (KEIN Web-formular) fügt eben dynamische Umbrüche ein, jenachdem wieviel Platz in der Eingabemaske zur Verfügung steht.
Die Eingabe des Users erfolgt in etwa wie bei Textverarbeitungssystemen, bei denen dynamische Zeilenumbrüche erzeugt aber nicht gespeichert werden UND eingegebene Zeilenumbrüche, Tabs, Blanks,... gespeichert und angezeigt werden.

Anm.: In die Daten im XML-file müssen genauso wie in der Datenbank stehen (ohne eingefügte br-tags o.ä.), da das XML-file auch von anderen Anwendungen verwendet werden soll. Eine Einfügung irgendwelcher Tags ist also "erst" im XSL möglich, was mir aber sehr umständlich erscheint (s.o.)

Würde mich (wie wohl jeder hier) sehr über einen praktikablen Lösungsvorschlag freuen.
Vielen Dank

  1. Moin!

    Also, in einer Tabellenzelle soll Text aus einer Datenbank (über ein XML-file) ausgegeben werden, der Zeilenumbrüche und evtl. auch Tabs und mehrere aufeinander folgende Blanks enthält. Meines Wissens ist es doch eine Funktion des jeweilige Browser (da HTML-Standard), alle aufeinanderfolgenden (auch einzelne) Leerzeichen durch ein Blank zu ersetzen. Hierbei sind Leerzeichen auch Tabs und Zeilenumbrüche! Dies zu unterdrücken, also den Text "wie eingegeben" auszugeben ist anscheinend nur mittels pre-tag (oder eines Vorgängers desselben) möglich; oder durch massive stringoperationen, die in xsl aber sehr umständlich sind.

    Hinterher soll ja HTML rauskommen, also gilt:
    Zeilenumbrüche sind durch <br> zu ersetzen, oder auch durch Textblöcke <p>text</p>. Und Tabulatoren kennt HTML garnicht, also können die auch nicht als Zeichen übernommen werden. Ich schätze, selbst <pre> hat mit Tabulatoren seine Probleme.

    Du wirst also um eine komplexere Umformung nicht herumkommen. Oder du mußt das Problem so umdefinieren, daß es zu einer einfachen Lösung paßt. ;)

    - Sven Rautenberg

    1. Mahlzeit, Sven!

      Zeilenumbrüche sind durch <br> zu ersetzen, oder auch durch Textblöcke <p>text</p>. Und Tabulatoren kennt HTML garnicht, also können die auch nicht als Zeichen übernommen werden. Ich schätze, selbst <pre> hat mit Tabulatoren seine Probleme.

      Tabulatoren sind kein Problem. Siehe unten (erfolgreich getestet mit IE 5.5, Netscape 4.75, Netscape 6.1, Opera 5.11 unter Windows).

      Gruß, Lutz

      <html><head></head><body>
      <script language="JavaScript">
      document.open();
      document.write("<pre>");
      document.write("1\t2\t3\t4\t5\t6\t7\t8\t9\t10\n");
      document.write("1\t2\t3\t4\t5\t6\t7\t8\t9\t10\n");
      document.write("</pre>");
      document.close();
      </script>
      </body></html>

      Fehler
      Es wird gerade ein anderes Posting bearbeitet. Bitte einfach nochmal abschicken (vorher evtl. ein paar Minuten warten).
      Ok, hab ich gemacht. Jetzt nochmal!

      1. Mahlzeit, Sven!

        Ich schätze, selbst <pre> hat mit Tabulatoren seine Probleme.

        Tabulatoren sind kein Problem. Siehe unten (erfolgreich getestet mit IE 5.5, Netscape 4.75, Netscape 6.1, Opera 5.11 unter Windows).

        Gruß, Lutz

        <html><head></head><body>
        <script language="JavaScript">
        document.open();
        document.write("<pre>");
        document.write("1\t2\t3\t4\t5\t6\t7\t8\t9\t10\n");
        document.write("1\t2\t3\t4\t5\t6\t7\t8\t9\t10\n");
        document.write("</pre>");
        document.close();
        </script>
        </body></html>

        Hallo Sven und Lutz,
        Vielen Dank für eure Antworten...
        leider bin ich dadurch noch nicht weiter (außer das ich dem Kunden jetzt mit ruhigerem Gewissen sagen kann: "Es geht nicht (so einfach)"):
        Das pre-tag hatte ich wie gesagt schon ausprobiert. Leider wurde das "width"-Attribut aus der Definition rausgeschmissen - und genau das fehlt mir jetzt!
        Ich werde wohl nicht drumrum kommen im xsl durch rekursive Template-calls jedes einzelne Leerzeichen (blank/tab/cr) zu ersetzen. Bin nur mal gespannt, wie sich das auf die Performance auswirkt, wenn in einem XML-file mehrer Datensätze einer DB-Tabelle mit jeweils Textfelder sind, die jeweils z.B. ca. eine DIN A4 Seite Text enthalten - in denen teilweise mit Tabs eine kleine Tabelle nachgebildet wurde.
        Sorry - den Aufschrei kann ich fast hören - aber die User beim Kunden sind halt an Textverarbeitungen gewöhnt und wünschen eben soviel Komfort wie möglich...

        Gruß, Andreas