frage: <xsl:variable> den Wert "Zeilenumbruch" zuweisen

Habe es mit <xsl:variable name="test">&#xA;</xsl:variable> versucht, aber offenbar ist es falsch, dagegen so etwas wie <xsl:variable name="test">&#x00FC;</xsl:variable> funktioniert.

  1. Hallo,

    Habe es mit <xsl:variable name="test">&#xA;</xsl:variable> versucht, aber offenbar ist es falsch, dagegen so etwas wie <xsl:variable name="test">&#x00FC;</xsl:variable> funktioniert.

    Probiere es mit &#xD;&#xA;

    \n   = &#xA;      // Unix
    \r   = &#xD;      // Mac
    \r\n = &#xD;&#xA; // Windows

    MfG, Thomas

    1. hallo, danke für die schnelle Antwort, hat aber leider nicht geklappt.. :(

  2. Hi,

    Habe es mit <xsl:variable name="test">&#xA;</xsl:variable> versucht, aber offenbar ist es falsch, dagegen so etwas wie <xsl:variable name="test">&#x00FC;</xsl:variable> funktioniert.

    Wie sieht das Resultat der Transformation an der Stelle aus, an der die Variable eingesetzt wird?

    Wie sieht die Verwendung der Variable aus?
    Was für eine Sprache wird erzeugt? HTML? Dann ist vielleicht <br/> geeigneter als &#xa; (ein Zeilenumbruch im Quelltext wird ja in den meisten Fällen bei HTML mit benachbarten Whitespace-Zeichen zu einem Leerzeichen reduziert).

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo, vielen Dank für die Antwort,

      als Ausgabe habe ich ein PDF-Dokument, muss innerhalb eines Elementes nach dem Zeilenumbruch suchen bzw. prüfen, ob das letzte Zeichen ein Zeilenumbruch ist. Mache es folgendermaßen:

      <xsl:variable name="test">&#xA;</xsl:variable>
      <xsl:if test="substring($element, string-length($element) - string-length($test) + 1) = $test">
      mach...
      </xsl:if>

      Wie gesagt, bei anderen Zeichen funktioniert es wunderbar.. Mit dem &#xA; wird zwar keine Fehlermeldung ausgegeben, dafür aber jedesmal "mach" ausgeführt, egal, wie das letzte Zeichen aussieht..

      Hi,

      Habe es mit <xsl:variable name="test">&#xA;</xsl:variable> versucht, aber offenbar ist es falsch, dagegen so etwas wie <xsl:variable name="test">&#x00FC;</xsl:variable> funktioniert.

      Wie sieht das Resultat der Transformation an der Stelle aus, an der die Variable eingesetzt wird?

      Wie sieht die Verwendung der Variable aus?
      Was für eine Sprache wird erzeugt? HTML? Dann ist vielleicht <br/> geeigneter als &#xa; (ein Zeilenumbruch im Quelltext wird ja in den meisten Fällen bei HTML mit benachbarten Whitespace-Zeichen zu einem Leerzeichen reduziert).

      cu,
      Andreas

      1. Hi,

        <xsl:variable name="test">&#xA;</xsl:variable>
        <xsl:if test="substring($element, string-length($element) - string-length($test) + 1) = $test">

        Also wenn ich das richtig sehe:
        string-length($test) ist 1 (es steht genau das Zeilenumbruchzeichen drin)
        Also wird
        substring($element, string-length($element)) ausgewertet.
        Mit anderen Worten: das letzte Zeichen (wozu das ' - string-length($test) + 1'?).

        Was steht denn genau in dem betroffenen Element?
        Wie sind die white-space Einstellungen für das betroffene Element?
        Steht das schließende tag des Elements in einer neuen Zeile?

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.Mud-Guard.de/
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hallo Andreas,

          vielen Dank für die Antwort! Also ich habe einfach das Beispiel aus der Seite http://xsl-rp.de/index.php?top=1&sub=2&cmd=61&action=cmd übernommen, aber das, was Du geschrieben hast, stimmt natürlich, die zweite Hälfte der Abfrage war wohl nicht nötig.. Vielen Dank für die schnelle Hilfe! Habe übrigens rausgefunden, dass man auch <xsl:variable name="test">&#x2028;</xsl:variable> geht, also mit einem anderen Unicode.

      2. Hallo,

        als Ausgabe habe ich ein PDF-Dokument, muss innerhalb eines Elementes nach dem Zeilenumbruch suchen bzw. prüfen, ob das letzte Zeichen ein Zeilenumbruch ist. Mache es folgendermaßen:

        <xsl:if test="substring($element, string-length($element) - string-length($test) + 1) = $test">
        mach...
        </xsl:if>

        Was sollte dieser Ausdruck nochmal prüfen?
        string-length($test) + 1 = 2

        if: substring($element, string-length($element)) = $test

        Damit bekommt man das letzte Zeichen im Element. Das Funktioniert bei mir mit:
        <xsl:if test="substring($element, string-length($element)) = '&#xA;'">
         ... tue was ...
        </xsl:if>

        Wie gesagt, bei anderen Zeichen funktioniert es wunderbar.. Mit dem &#xA; wird zwar keine Fehlermeldung ausgegeben, dafür aber jedesmal "mach" ausgeführt, egal, wie das letzte Zeichen aussieht..

        Das kann aber auch daran liegen, dass deine Elemente 'ordentlich' Formatiert sind:

        ihnalt
        </element>

        d.h. es gibt _immer_ ein Zeilenumbruch am Ende.

        Grüße
        Thomas

        1. Hallo Thomas,

          vielen Dank für die Antwort, also ich habe mich da wohl etwas vertan.. :( oder besser gesagt, mich zu sehr auf das Beispiel auf der Seite http://xsl-rp.de/index.php?top=1&sub=2&cmd=61&action=cmd verlassen bzw. da was falsch verstanden.. auf jeden Fall funktioniert Dein Vorschlag wunderbar, vielen Dank!! Das war ja das Problem, dass die Elemente nicht immer so "ordentlich" formatiert sind, leider, leider.. :) Danke schön!

          1. Hallo,

            vielen Dank für die Antwort, also ich habe mich da wohl etwas vertan.. :( oder besser gesagt, mich zu sehr auf das Beispiel auf der Seite http://xsl-rp.de/index.php?top=1&sub=2&cmd=61&action=cmd verlassen bzw. da was falsch verstanden.

            Das ist das "Musterbeispiel" aus Michael Kays Buch ;-)

            substring($A, string-length($A) - string-length($B) + 1) = $B

            welches eigentlich auch funktioniert.

            auf jeden Fall funktioniert Dein Vorschlag wunderbar, vielen Dank!!

            Gerne ;-)

            Grüße
            Thomas