Announcement

Collapse
No announcement yet.

XSLT geht nicht mit dem Microsoft Internet Explorer 7.0

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSLT geht nicht mit dem Microsoft Internet Explorer 7.0

    Hi,

    schon wieder ein XSLT-Problem. Un kein Ende ist in Sicht.. meine XSLT Style-Sheets die ich mit soviel Mühe erstellt haben, gehen gut mit Mozilla Firefox , aber nicht mit dem Microsoft Internet Exproler 7.0....

    Im IExplorer sehe ich einfach Daten-Inhalt der XML ohne ihre Tags. Ich bekomme keinen Syntaktischen Fehler aber die XSLT-Transformation scheint nicht zu funktionieren.

    Was sollte ich hier in meine XSLT schreiben damit der Exproler die auch interpretieren kann?

  • #2
    Wie wäre es mit einer genaueren Fehlerbeschreibung und Eingrenzung des Problems auf die relevanten Codezeilen?

    Comment


    • #3
      OK, ich habe das Problem eingegrenzt. Internet Exproler akzeptiert keine Sonderzeichen wie < wenn es um Ausgabe geht, .z.B.

      <xsl:variable name="cur_text" select= "concat('&lt;', $var_concat, '&gt;')"/>
      - da ignoriert er den gesammten Befehl. Ersetzt man die eckigen Klammern mit '(' und ')' dann geht es wieder.

      Weiter erkennt IExplorer Das zeichen für zeilenumbruch nicht : <xsl:text>&#xA;</xsl:text>
      ich habe auch so probiert:
      <xsl:text>
      </xsl:text>

      hilft nix. Wie kann ich hier den Zeilenumbruch erzeugen?

      unten der XSL-Script (verbesserte Version von früher, vielleicht geht es noch kürzer mit irgendeinem xsl konstrukt...):
      <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xslutput method="text" indent="no" encoding="UTF-8"/>
      <xsl:strip-space elements="*"/>

      <!--@author: sgeorgiev-->
      <!--@date: 19.11.2008-->

      <xsl:variable name="max_len" select="35"/>
      <!--main-->

      <xsl:template match="/">
      <xsl:apply-templates/>
      </xsl:template>

      <!--match nodes that are tags -->
      <xsl:template match="*[count(descendant::*) = 0]">
      <xsl:variable name="var_concat">
      <xsl:for-each select="ancestor-or-self::*">
      <xsl:value-of select="name()"/>
      <xsl:if test="not(text())"><xsl:text>.</xsl:text></xsl:if>
      </xsl:for-each>
      </xsl:variable>

      <xsl:variable name="cur_text" select= "concat('&lt;', $var_concat, '&gt;')"/>

      <!--loop start-->
      <xsl:call-template name="for.loop">
      <xsl:with-param name="cur_text" select="$cur_text"></xsl:with-param>
      <xsl:with-param name="maxlen" select="$max_len"></xsl:with-param>
      </xsl:call-template>
      <xsl:apply-templates/>
      </xsl:template>

      <!-- match nodes that are text -->
      <xsl:template match="text()">
      <xsl:variable name="cur_text" select= "."/>

      <!--loop start-->
      <xsl:call-template name="for.loop">
      <xsl:with-param name="cur_text" select="$cur_text"></xsl:with-param>
      <xsl:with-param name="maxlen" select="$max_len"></xsl:with-param>
      </xsl:call-template>
      </xsl:template>

      <!-- recursive loop definition -->
      <xsl:template name="for.loop">
      <xslaram name="cur_text" />
      <xslaram name="maxlen" />

      <xsl:variable name="str_len" select ="string-length($cur_text)"/>

      <xsl:choose>
      <xsl:when test="$maxlen &lt; $str_len">
      <xsl:variable name ="s" select="substring($cur_text, 1, $maxlen)"/>
      <xsl:if test="string-length($s) &gt; 0">
      <xsl:value-of select="$s"/>
      <xsl:text>&#xA;</xsl:text>
      <xsl:call-template name="for.loop">
      <xsl:with-param name="cur_text">
      <xsl:value-of select="substring-after($cur_text, $s)"/>
      </xsl:with-param>
      <xsl:with-param name="maxlen" select="$maxlen"></xsl:with-param>
      </xsl:call-template>
      </xsl:if>
      </xsl:when>
      <!-- just print it -->
      <xsltherwise>
      <!--otherwise -->
      <xsl:if test="string-length($cur_text) &gt; 0">
      <xsl:value-of select="$cur_text"/>
      <xsl:text>&#xA;</xsl:text>
      </xsl:if>
      </xsltherwise>
      </xsl:choose>
      </xsl:template>
      </xsl:stylesheet>

      Comment


      • #4
        Probiere für den Umbruch &xD;&xA; (also den Windows-typischen Umbruch \r\n). Für die Ausgabe der spitzen Klammern bietet sich das Attribut disable-output-escaping="yes" bei xsl:value-of an. Sollte das Ergebnis XML-Code sein, wäre die Ausgabemethode "xml" sinnvoller gegenüber "text".

        Comment


        • #5
          XSLT-Zeilenumbruch im Explorer geht nicht..

          Leider erkennen Explorer 7.0 und auch Firefox &xD nicht; ich bekomme den Fehler:
          Reference to undefined entity 'xD'. Error processing resource

          Ich habe folgendes probiert:
          <xsl:text>&xD;&xA;</xsl:text>

          und so:

          <xsl:text>&xD;</xsl:text>
          <xsl:text>&xA;</xsl:text>

          beides wirft einen Fehler...

          Comment


          • #6
            Sorry, #-Zeichen unterschlagen, also &#xD;&#xA; war gemeint.

            Comment


            • #7
              Stimmt, hatte ich auch übersehen.
              das Ergebnis von <xsl:text>&#xD;&#xA;</xsl:text> ist im IExplorer 7.0 nur ein Space aber kein Carriage return. Firefox dagegen verdaut alles ganz gut.
              Interessanterweise, wenn ich die output methode von text auf xml ändere (<xslutput method="xml" indent="no" encoding="UTF-8"/>), dann bekomme ich das gleiche Ergebnis bei beiden Browsern, nämlich statt zeilenumbruch nur ein Space. Gibt es ein Äquivalent für <xsl:text>&#xD;&#xA;</xsl:text> für xml-output?

              Ausgabe:
              <cata log.c d.tit le> Empir e Bur lesqu e <cata log.c d.art ist> Bob D ylan ...
              Sollte aber sein (Umbruch auf 5 Zeichen):
              <cata
              log.c
              d.tit
              le>
              Empir
              e Bur
              lesqu
              e
              <cata
              log.c
              d.art
              ist>
              Bob D
              ylan ...
              Bin weiter auf der Suche...

              Comment


              • #8
                Vielleicht hilf media-type="text/plain" bei xslutput. Ansonsten frage ich mich, ob das bei Browserausgabe nicht besser mit HTML umzusetzen wäre (dann ggf. <br /> für Zeilenumbrüche). Zur direkten Kodierung von Zeilenumbrüchen gibt es üblicherweise \r (MacOS vor X), \n (UNIX-basierte Systeme, also auch ab MacOS X) und \r\n für DOS/Windows (n = line feed = ASCII 10, r = carriage return = ASCII 13).

                Als XML kann das Gewünschte nicht verarbeitet werden, weil in XML-Namen keine Whitespace-Zeichen vorkommen dürfen (Ein < eröffnet ja im XML-Kontext ein Element). Versuche es wie gesagt mit HTML oder prozessiere serverseitig (etwa mittels PHP-XSLT-Funktionen) und liefere den Ergebnistext mit text/plain als Content-Type.

                Comment

                Working...
                X