Peter Henschel: NN6 schreibt alles in einer Zeile

wenn ich so eine xsl datei habe [1] und so eine xml datei [2] schreibt mir der Netscape6 unter Linux alles in einer Zeile. Sobalt ich aber das <body> weglasse, geht es. Aber das kann ja nicht die Lösung sein. Was muss ich ändern, damit der Netscape den Text am Fensterrand umbricht?

Peter Henschel

[1] blu.xsl
-----------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
   <html>
      <body>
  <xsl:value-of select="bla/inhalt" />
     </body>
   </html>
</xsl:template>
</xsl:stylesheet>
-----------------
[2] blu.xml
-----------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="blu.xsl"?>
<bla>
   <inhalt>
     Ein langer text, ein langer text, .....
   </inhalt2>
</bla>
-----------------

  1. hallo Peter,

    wenn ich so eine xsl datei habe [1] und so eine xml datei [2] schreibt mir der Netscape6 unter Linux alles in einer Zeile.

    Schwer nachvollziehbar. Ich habe allerdings Netscape6 nicht auf meiner SUSE, dafür habe ich mozilla1 auf FreeBSD. Sowohl damit wie auch mit IE 6 und Netscape 6.2, Netscape 7 und mozilla 1.1 unter Windows klappt alles, vorausgesetzt man korrigiert diese Angabe:

    <inhalt>
         Ein langer text, ein langer text, .....
       </inhalt2>

    </inhalt2>ist wohl ein Tippfehler, oder ??
    Ich habe einen sehr langen Text mal probeweise reinkopiert, und, wie gesagt, ich kann weder in FreeBSD noch in WINDOWS deinen "Fehler" reproduzieren. Am Fensterrand erfolgt der Umbruch

    Christoph S.

  2. Hi,

    probier mal:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
       <html>
          <title>irgendwas</title>
          <p>
      <xsl:value-of select="bla/inhalt" />
         </p>
       </html>
    </xsl:template>
    </xsl:stylesheet>

    Bringt das ne Verbesserung?

    Grüße,

    Utz

    1. hallo Nachbar ...

      probier mal:
      [ ... ]
         <html>
            <title>irgendwas</title>

      da hängt es bereits hier, es wird "irgendwas" auf den Bildschirm geschrieben statt des Inhalts der Vorlage (mozilla 1.1 und IE6). Ist auch klar: außer <html> kann kein anderes HTML-Element befolgt werden, also weder <title> noch <head> noch <body> noch <h1>, weil dafür die Formatierungen fehlen. Mit

      <xsl:template match="/">

      war ja vorgegeben worden, daß alles, was folgt, zur Vorlage "passen" muß, und in der Vorlage gibts keine Formatierung für <title> oder <p>, also wird die Datei gar nicht weiter abgearbeitet, bzw es wird in

      <xsl:value-of select="bla/inhalt" />

      nachgeschaut, ob es dort eine Festlegung für <title> und <p> gibt  -  vergeblich.

      Grüße

      Christoph S.

      1. Hallo Nachbar :-)

        äh...Bahnhof?

        Mit

        <xsl:template match="/">
        war ja vorgegeben worden, daß alles, was folgt, zur Vorlage "passen" muß, (...)

        <xsl:template match="/"> heißt doch: passt auf den Root der XML-Datei, oder?

        und in der Vorlage gibts keine Formatierung für <title> oder <p>,

        ...deswegen werden sie ja über das XSL-Stylesheet eingefügt...

        also wird die Datei gar nicht weiter abgearbeitet, bzw es wird in

        <xsl:value-of select="bla/inhalt" />

        ...und danach dann der Inhalt von bla/inhalt reingeschrieben. Dachte ich zumindest. Übersehe ich da etwas? Ziel meiner Abwandlung der XSL-Datei war, wenn auch minimales, so doch valides HTML als Ergebnis auszuspucken. Vielleicht fehlt da nur der korrekte HTML-4.01-Doctype?

        Wie auch immer, ich geh jetzt erst mal ins Bett :-)

        Grüße,

        Utz

        1. hi Utz,

          äh...Bahnhof?

          Nö, wieso denn?

          <xsl:template match="/"> heißt doch: passt auf den Root der XML-Datei, oder?

          Ja, so habe ich das bisher jedenfalls auch immer gelesen

          und in der Vorlage gibts keine Formatierung für <title> oder <p>,
          ...deswegen werden sie ja über das XSL-Stylesheet eingefügt...

          ja, aber nicht im XML-File abgearbeitet. Dort hat Peter bisher nur <bla> und <inhalt> stehen, aber keinerlei <p> oder <body>

          Übersehe ich da etwas?

          Vielleicht ... Die XSL ist eben nur die "Vorlage", die serlbstverständlich von der XML aus abgearbeitet werden müßte. Du kannst Unmengen Tags in deine XSL reinschreiben, wenn die XML-Datei die nicht aufruft, passiert eben nix  -  oder etwas Unerwartetes.

          Ziel meiner Abwandlung der XSL-Datei war, wenn auch minimales, so doch valides HTML als Ergebnis auszuspucken. Vielleicht fehlt da nur der korrekte HTML-4.01-Doctype?

          Wenn es "valide" sein soll ... ich bin da aber nicht so sicher, ich glaube, die Nutzung der W3C-Namensräume genügt, DOCTYPE ist hier wohl nicht zwingend erforderlich.

          Das "Problem" ist hier einfach, daß über die "Aufgabenverteilung" von XSL und XML nicht genügend Klarheit besteht.

          Wie auch immer, ich geh jetzt erst mal ins Bett :-)

          Ich auch ;-)

          und schnarch nicht zu laut ...

          Christoph S.

          1. Hi Christoph, hi Peter

            war wohl etwas zu spät gestern *hmpf* jetzt hab ich wenigstens selber mal mein Beispiel aus </?m=106792&t=18982> getestet (Mozi 1.0 auf NT4), und siehe da: Alles wie erwünscht, langer Text der umbricht und "irgendwas" in der Titelzeile. Übrigens bricht der lange Text mit Peters Code bei mir auch korrekt um. Der Unterschied zwischen Peters und meinem Code ist lediglich der, dass mein Code im Prinzip valides HTML erzeugt (allerdings ohne doctype) und Peters Code nicht - meine Hoffnung war, das könnte das Fehlverhalten beheben.

            Christoph, bei Dir auf Linux geht mein Beispiel echt nicht?

            und schnarch nicht zu laut ...

            Ging's? *fg*

            Grüße,

            Utz

            1. Hi Christoph, hi Peter

              war wohl etwas zu spät gestern *hmpf* jetzt hab ich wenigstens selber mal mein Beispiel aus </?m=106792&t=18982> getestet (Mozi 1.0 auf NT4), und siehe da: Alles wie erwünscht, langer Text der umbricht und "irgendwas" in der Titelzeile. Übrigens bricht der lange Text mit Peters Code bei mir auch korrekt um. Der Unterschied zwischen Peters und meinem Code ist lediglich der, dass mein Code im Prinzip valides HTML erzeugt (allerdings ohne doctype) und Peters Code nicht - meine Hoffnung war, das könnte das Fehlverhalten beheben.

              Dein Beispiel geht bei mir auch, doch dieses Beispiel enthält kein <body>. Wenn ich wieder ein <body> reinschreibe, schreibt er wieder alles in einer Zeile. Darf man bei XML/XSL kein <body> verwenden?

              Peter Henschel

              1. Hi Peter,

                Dein Beispiel geht bei mir auch, doch dieses Beispiel enthält kein <body>. Wenn ich wieder ein <body> reinschreibe, schreibt er wieder alles in einer Zeile. Darf man bei XML/XSL kein <body> verwenden?

                Eigentlich schon. Es geht ja eher darum, dass Du via XSL aus der XML-Datei etwas erzeugst, was die HTML-Rendering-Engine darstellen kann, will sagen: dargestellt wird HTML (wobei ich jetzt nicht behaupten möchte, ob das die selben oder andere Programmteile übernehmen; das weiß ich einfach nicht).

                Eine Herangehensweise könnte so sein: Schreib Dir mal manuell eine HTML-Datei, die die Daten so darstellt wie Du sie gern hättest. Zweiter Schritt: Du richtest Deine XSL-Datei so ein, dass exakt dieser HTML-Output entsteht (vielleicht das Ergebnis zwischendurch auch mal abspeichern lassen, damit man's anschauen kann). Wenn jetzt zwischen beiden Versionen Darstellungsunterschiede bestehen, würde ich von einem Browser- oder Parser-Bug ausgehen.

                In Deinem Fall: Tritt bei

                <html>
                  <body>
                    Ein langer Text, ein langer Text,....
                  </body>
                </html>

                der Zeilenumbruchsfehler auf oder nicht? Wenn ja, verträgt Netscape 6 dieses invalide HTML nicht, wenn nein, ist da einfach ein Bug zu Gange.

                Grüße,

                Utz

                1. *grummel* was bin heute vergesslich...

                  Wie sieht's denn mit

                  <?xml version="1.0" encoding="ISO-8859-1"?>
                  <xsl:stylesheet version="1.0"
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                  <xsl:template match="/">
                     <html>
                       <head>
                         <title>irgendwas</title>
                       </head>
                       <body>
                         <p>
                           <xsl:value-of select="bla/inhalt" />
                         </p>
                       </body>
                     </html>
                  </xsl:template>
                  </xsl:stylesheet>

                  aus? Gibt's Zeilenumbrüche oder nicht?

                  Grüße,

                  Utz

                  1. <?xml version="1.0" encoding="ISO-8859-1"?>
                    <xsl:stylesheet version="1.0"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                    <xsl:template match="/">
                      <html>
                        <head>
                          <title>irgendwas</title>
                        </head>
                        <body>
                          <p>
                            <xsl:value-of select="bla/inhalt" />
                          </p>
                        </body>
                      </html>
                    </xsl:template>

                    geht nicht

                    <?xml version="1.0" encoding="ISO-8859-1"?>
                    <xsl:stylesheet version="1.0"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                    <xsl:template match="/">
                      <html>
                        <head>
                          <title>irgendwas</title>
                        </head>
                        <body>
                            <xsl:value-of select="bla/inhalt" />
                        </body>
                      </html>
                    </xsl:template>

                    geht auch nicht

                    ---------------

                    <?xml version="1.0" encoding="ISO-8859-1"?>
                    <xsl:stylesheet version="1.0"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                    <xsl:template match="/">
                      <html>
                        <head>
                          <title>irgendwas</title>
                        </head>
                            <p><xsl:value-of select="bla/inhalt" /></p>
                      </html>
                    </xsl:template>

                    geht richtig, bis auf die Tatsache das das margin-left fehlt

                    <?xml version="1.0" encoding="ISO-8859-1"?>
                    <xsl:stylesheet version="1.0"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                    <xsl:template match="/">
                      <html>
                        <head>
                          <title>irgendwas</title>
                        </head>
                           <xsl:value-of select="bla/inhalt" />
                      </html>
                    </xsl:template>

                    hier gehts auch, nur hier fehlt nun das margin-top und -left

                    -------------
                    Im reinen HTML gehen alle Versionen. Schein wohl so zu sein das dies ein bug in Netscape ist. Wenn das <body>-tag vorhanden ist, wird alles in einer Zeile geschrieben, spricht, kein Umbruch am Fensterrand. Vielleicht kann man da was mit <div>'s oder Tabellen tricksen, denn ein <body>-tag sollte das Dokument schon haben.

                    Peter Henschel

                    1. Hi Peter,

                      Im reinen HTML gehen alle Versionen. Schein wohl so zu sein das dies ein bug in Netscape ist. Wenn das <body>-tag vorhanden ist, wird alles in einer Zeile geschrieben, spricht, kein Umbruch am Fensterrand. Vielleicht kann man da was mit <div>'s oder Tabellen tricksen, denn ein <body>-tag sollte das Dokument schon haben.

                      Hm ja, vielleicht tröstet es Dich etwas, dass laut HTML 4.01 <body>...</body> und <head>...</head> nicht zwingend vorgeschrieben sind. <title>...</title> und mindestens ein Block-Level-Element dagegen schon. Es wäre also nur ungewöhnlich, nicht falsch, wenn Du <body>...</body> einfach weg ließest.

                      Grüße,

                      Utz

                    2. hallo Peter,

                      [ ... ]
                      geht nicht.

                      Es wäre zur "Aufklärung" ganz hilfreich, wenn du genauer sagst, _was_ da nicht geht. Konkret: was du jeweils in dein XML-File geschrieben hast. Ich habe die (stille) Vermutung, daß ganz einfach dein XML-File nicht richtig "mitspielen" möchte. So weit ich das sehe, hast du doch im XML-File nur drinstehen:

                      <bla>
                         <inhalt>
                           Ein langer text, ein langer text, .....
                         </inhalt>
                      </bla>

                      Wenn du jetzt in dein XSL-File _zusätzlich_ reinschreibst:
                               <xsl:value-of select="p" />
                      und danach im XML-File noch dazuschreibst:
                      <p>
                         Ein anderer sehr sehr langer Text
                      </p>
                      müßte das ebenfalls dargestellt werden (tut es bei mir). Und um das zu formatieren (margin wolltest du haben), brauchst du dann noch eine zusätzliche CSS, die entweder im XML-File oder im XSL-File referenziert werden kann.

                      Insgesamt möchte ich dich bitten, dich _ganz und gar_ von dem Versuch zu lösen, im XSL-File irgendwelche HTML-Elemente vorzugeben. Das "funktioniert" zwar (teilweise), aber da beißen sich ganz einfach XML und HTML. Du hast doch bereits mit <bla> und <inhalt> "eigene" tags erfunden. Und das ist doch auch Sinn und Zweck der Übung, sich von der beschränkten Auswahl der streng definierten HTML-Elemente lösen und dafür eigene Elemente kreieren zu können. Es geht gar nicht darum, irgendwelches "valides" oder "invalides" HTML zu erzeugen. Es geht darum, korrektes XML zu schreiben ;-)

                      Grüße aus (na du weißt schon)

                      Christoph S.

                      PS: ähm, hilfts nicht auch ein _bißchen_ weiter, mal in SELFHTML nachzulesen? Ich habe die XML-Einführung für eine gelungene Erweiterung gegenüber Version 7 gehalten, wenn auch trotz des Umfangs irgendwie "zu wenig"

                      1. Hallo Nachbar ;-)

                        Insgesamt möchte ich dich bitten, dich _ganz und gar_ von dem Versuch zu lösen, im XSL-File irgendwelche HTML-Elemente vorzugeben. Das "funktioniert" zwar (teilweise), aber da beißen sich ganz einfach XML und HTML.

                        Ich glaub ich weiß jetzt wo unser Missverständnis liegt - wenn Peter und ich hier im Thread einfach ungenau von "XSL" gesprochen haben, haben wir XSLT gemeint, und da gehören natürlich HTML-Elemente mit rein (vgl. http://selfhtml.teamone.de/xml/darstellung/xsltbeispiele.htm - Peters Code ist ja da dem ersten Beispiel dort sehr ähnlich); Du meintest wohl eher das "eigentliche" XSL (auch XSL-FO genannt), in dem HTML-Elemente natürlich nicht wirklich Sinn machen.

                        Hier noch mal kurz eine Darstellung der Verwendung von XSLT zur Darsetllung der Inahlet von XML-Dateien in Web-Browsern:

                        XML (Datenhaltung) --> Transformation vermittels XSLT --> in XHTML

                        Die Aufgabe der XSLT-Datei ist dabei, festzulegen, innerhalb welcher XHTML-Tags die Inhalte der XML-Datei dargestellt werden sollen. Daher müssen sie dort natürlich auch drin stehen. Die XSLT-Datei muss den XML-Regeln entsprechen, weswegen eigentlich das "Ergebnis", das der Browser anzeigt, auch XHTML (d.h. entsprechend der XML-Regeln) ist. (Da habe ich hier im Thead ungeau von HTML gesprochen). Dieses XHTML muss nicht zwingenderweise valide, aber unbedingt wohlgeformt sein.

                        Die Transformation mittels XSLT kann wahlweise auf dem Server oder auf dem Client vorgenommen werden. Der bei weitem überwiegende Teil des Einsatzes dürfte serverseitig sein, d.h. im Browser-Quelltext siehst Du dann nicht mehr, dass XML und XSLT im Spiel waren. Transformationen auf dem Client sind dagegen ziemlich selten.

                        So, ich hoffe das trägt ein wenig zur Klärung der Verwirrung bei ;-)

                        Grüße,

                        Utz

                        1. hoi ;-)

                          So, ich hoffe das trägt ein wenig zur Klärung der Verwirrung bei ;-)

                          vielleicht ... ich denke, die Diskussion wars schon wert.

                          Grüße

                          Christoph S.