André Laugks: XML und Leerzeichen ( )

Hallo!

Ich wollte eben mal ein Leerzeich ( ) in einer XSLT-Datei einfügen und bekam eine Fehlermeldung. Nach kurzer Recherche war mir auch klar wieso. Man kann also dafür den Unicode &#160; verwenden. Nun schaue ich nach der Transformation in den Quellentext des transformieren Dokumentes und &#160; ist nicht da. Ich brauchte das für eine Tabellenzelle (<td>&#160;</td>). Im Quellentext sieht das also so aus <td> </td> (Leerzeichen/Leerstelle zwischen dem td's ist zu beachten). Die Tabellenzelle zeigt mir aber im Browser an, das in der Zelle Inhalt ist, also nicht leer. Ich mache also mal die Probe mit (|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;|) und sie da, die beiden vertikalen Striche stehen weit auseinander (|      |).

Ist das Leerzeichen &#160; nur "virtuell" da?

MfG, André Laugks

--
L-Andre @ gmx.de
  1. Hallo!

    Hm, ungetestet würd ich sagen, probier mal folgendes:
    &#160;

    Vielleicht hilft das.

    Gruß Maik

  2. Hallo Andre,

    Ist das Leerzeichen &#160; nur "virtuell" da?

    Nein. Eigentlich müsste im Quelltext er erzeugten HTML-Seite
    <td>|     |</td> stehen, denn sonst wären ja die striche nicht so weit auseinander, da in HTML ja nicht explizit definierte Leerzeichen (eben z.B.  ) zu einem Leerzeichen kollabiert werden.

    Vielleicht leigt es an deinem Editor?

    Grüße
    Thomas

    1. Hallo!

      Nein. Eigentlich müsste im Quelltext er erzeugten HTML-Seite
      <td>|     |</td> stehen, denn sonst wären ja die striche nicht so weit auseinander, da in HTML ja nicht explizit definierte Leerzeichen (eben z.B.  ) zu einem Leerzeichen kollabiert werden.

      Ich es eben noch einmal mit (|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;|) versucht. Im Saxon tut sich was. Den quelltext habe ich mir jeweils im NN7 und IE 5.5 angeschaut.

      Saxon
      Quelltext -> |        |
      Browser -> |        |

      Sablotron
      Quelltext -> |        |
      Browser -> |        |

      MSXML (IE 5.5)
      Quelltext -> |        |
      Browser -> |        |

      Aber ich habe mal eben die Striche ohne &#160; auseinander geschoben. Die Striche klappen wie erwartet zusammen. Also muß ja irgendwie ein Leerzeichen da sein.

      MfG, André Laugks

      --
      L-Andre @ gmx.de
      1. Hallo Andre,

        könnte es sein, dass in dem einen Fall der Ascii Code für ein Leerzeichen gespeichert ist, und im anderen Fall der Unicode ? Es muss irgendwie entweder am gespeicherten Zeichen liege, (könntest Du in einem Hexeditor nachschauen), oder vielleicht an der Art und Weise wie der Browser die Datei interpretiert, vielleicht nimmt er mal Unicode das andere Mal Ascii als Grundlage.

        Gruss

        Marko

        1. Hallo Marko,
          hallo André!

          könnte es sein, dass in dem einen Fall der Ascii Code für ein Leerzeichen gespeichert ist, und im anderen Fall der Unicode ?

          Das ist definitiv so - die XSL-Engine transformiert schon richtig und setzt statt &#160; den entsprechenden Unicode ein - in der Windows Zeichentabelle steht als Beschreibung zu diesem Zeichen: "Dauerleerzeichen".

          Den selben (gewünschten) Effekt hättest Du, wenn Du in der HTML-Datei statt   ein ALT-0160 (zumindest in Windows) eingeben würdest. Also, soweit, so richtig.

          mfg

          norbert =:-)

          1. Hallo Nordert,

            könnte es sein, dass in dem einen Fall der Ascii Code für ein Leerzeichen gespeichert ist, und im anderen Fall der Unicode ?

            Das ist definitiv so - die XSL-Engine transformiert schon richtig und setzt statt &#160; den entsprechenden Unicode ein - »»

            Wie meinst du das bitte?

            Grüße
            Thomas

            1. Hallo Thomas!

              Also - ich bezog mich dabei auf http://selfhtml.teamone.de/xml/regeln/xmldeklaration.htm#zusatzangaben

              "Wenn Sie keine Angaben zum Zeichensatz machen, wird per Voreinstellung der Unicode-gerechte Zeichensatz ISO/IEC 10646 angenommen"

              Korrekt wäre auch, dass der Parser für dieses "named entity" den Unicode liefert, welches der "XSL-Transformator" auch richtig in das Resultat einbindet.

              Da ich jedoch gerade gerügt wurde, derartig "schwammige" Statements nicht mehr zu posten, werde ich mich künftig zurückhalten.

              mfg

              norbert =:-)

              PS: Absicht?

              Hallo Nordert,

              1. Hallo Norber,

                Also - ich bezog mich dabei auf http://selfhtml.teamone.de/xml/regeln/xmldeklaration.htm#zusatzangaben

                "Wenn Sie keine Angaben zum Zeichensatz machen, wird per Voreinstellung der Unicode-gerechte Zeichensatz ISO/IEC 10646 angenommen"

                Das ist ja auch richtig. Aber das spielt keine Rolle, denn ob jetzt der Parser &#160; oder &#xA0; schreibt ist ja egal, was er nicht macht (machen soll) aus einem &#160; ein &#x20; zu machen.
                Das erste ist ein geschützes Leerzeichen und das zweite ein normaler "Space".

                Korrekt wäre auch, dass der Parser für dieses "named entity" den Unicode liefert, welches der "XSL-Transformator" auch richtig in das Resultat einbindet.

                Sehe ich anders, denn warum soll ein XML-Parser für eine dezimale oder eine unicode Notierung eine HTML-Entity zurückgeben?
                Das wäre dann die Sache der XSL-Parser, wenn im xsl:output method="html" notiert wurde.

                Da ich jedoch gerade gerügt wurde, derartig "schwammige" Statements nicht mehr zu posten,

                Von wem denn?

                PS: Absicht?

                Hallo Nordert,

                Eh... sorry, nein. "Dich" hat meine "Aufmerksamkeit" noch gut erwischt, unlängst haben ich Andreas zu Achim umgetauft ;-)

                1. Hallo Thomas!

                  Hallo Norber,

                  Jetzt aber ...

                  ... was er nicht macht (machen soll) aus einem &#160; ein &#x20; zu machen.

                  Richtig. Hab ich auch nicht behauptet - offenbar erkennt André den Unterschied zwischen &#32; (Leerzeichen) und &#160; (geschütztes Leerzeichen) im Editor nicht, da beide als Blank dargestellt werden.

                  Von wem denn?

                  Verrat ich nicht ;-)

                  mfg

                  norbert =:-)

        2. Hallo,

          könnte es sein, dass in dem einen Fall der Ascii Code für ein Leerzeichen gespeichert ist, und im anderen Fall der Unicode ?

          Wenn du meinst dass der XSL-Prozessor bei einem &#160; in der XSL-Datei statt   ein &#x20; in die HTML-Seite schreibt, dann wäre das ein Fehler im Prozessor.

          Grüße
          Thomas

      2. Hallo Andre,

        Im Saxon tut sich was. Den quelltext habe ich mir jeweils im NN7 und IE 5.5 angeschaut.

        Saxon
        Quelltext -> |        |
        Browser -> |        |

        Wie erwartet.

        Sablotron
        Quelltext -> |        |
        Browser -> |        |

        Sablotron speichert ja die Datei nicht, sondern transformiert on the fly, das könnte anderes sein als bei einer statischen HTML-Datei.
        Versuche mal mit einem <xsl:output method="html" />

        MSXML (IE 5.5)
        Quelltext -> |        |
        Browser -> |        |

        Wo kannst du da HTML sehen? Beim Quelltextansehen zeigt der IE die XML-Datei.

        Grüße
        Thomas

        1. Hallo!

          Wo kannst du da HTML sehen? Beim Quelltextansehen zeigt der IE die XML-Datei.

          Da verweise ich mal auf Dein Buch wie das geht! ;-)

          MfG, André Laugks