Announcement

Collapse
No announcement yet.

Darstellung von Quellcode

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

  • Darstellung von Quellcode

    Hallo

    Vielleich hat jemand von euch eine Idee oder Hinweis.


    Mein Ziel ist es einen Textblock, welcher mit Zeilenumbrüchen eingeben wurde, in der Darstellung die Zeilen zu nummerieren. (Wie klassische Quellcodedarstellung)


    Code:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="hcp_test.xsl" ?>
    <atom id="1">
    <name id="2">NAME</name>
    <desc id="3">TEXTINHALT DESC</desc>
    <cdata id="4">Zeile A
    Zeile B
    Zeile C
    </cdata>
    <type id="5">htm</type>
    </atom>

    Ergebnis


    01 Zeile A
    02 Zeile B
    03 Zeile C



    Vielen Danke in Voraus

  • #2
    Ein 2.0-Ansatz ist in meinem EPUB-Projekt ab Zeile 430 (quelltext-Element) ersichtlich.

    Comment


    • #3
      Erstmals vielen Dank für die Antwort.

      Ich arbeite noch mit 1.0 - gibts hier auch ein Beispiel.

      Comment


      • #4
        Welchen XSLT 1.0 Prozessor benutzt du? So der http://exslt.org/str/functions/tokenize/index.html unterstützt, sollte es damit einfach funktionieren, den Textinhalt per
        Code:
        <xsl:template match="cdata[@id = 4]">
          <xsl:for-each select="str: tokenize(., '
        ')">
             <xsl:value-of select="concat(format-number(position(), '00'), ' ', ., '
        ')"/>
          </xsl:for-each>
        </xsl:template>
        in Zeilen zu transformieren.

        Comment


        • #5
          Vielen Dank, ich werde es testen.

          Comment


          • #6
            Klappt leider nicht

            Mein Code klappt leider nicht

            Code:
            <xsl:stylesheet 
             version="1.0"
             xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
             xmlns:str="http://exslt.org/strings"
             extension-element-prefixes="str">
            
            
            <xsl:template match="/">
              <xsl:apply-templates/>
            </xsl:template>
            
            
            <xsl:template match="cdata">
              <xsl:for-each select="str: tokenize(., '
            ')">
                 <xsl:value-of select="concat(format-number(position(), '00'), ' ', ., '
            ')"/>
              </xsl:for-each>
            </xsl:template>
            
            
            
            </xsl:stylesheet>
            Der XSLT 1.0 Prozessor läuft unter PHP und unterstützt exslt.

            Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: Invalid expression in D:\XAMPP_173\xampp\htdocs\haiku_gen_08\hcp_main\in dex.php on line 329

            Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: compilation error: file file:///D:/XAMPP_173/xampp/htdocs/haiku_gen_08/hcp_main/ line 15 element for-each in D:\XAMPP_173\xampp\htdocs\haiku_gen_08\hcp_main\in dex.php on line 329

            Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: xsl:for-each : could not compile select expression 'str: tokenize(., ' ')' in D:\XAMPP_173\xampp\htdocs\haiku_gen_08\hcp_main\in dex.php on line 329

            Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: No stylesheet associated to this object in D:\XAMPP_173\xampp\htdocs\haiku_gen_08\hcp_main\in dex.php on line 347



            Danke für eine Idee

            Comment


            • #7
              Ich hatte das Beispiel direkt im Forumedtitor getippt und habe dabei versehentlich ein Leerzeichen zwischen "str:" und "tokenize" eingefügt, das hast du dann unglücklicherweise auch so kopiert.
              Und dann macht das Forum immer Probleme beim Einfügen von Zeichenreferenzen in Codebeispielen.
              Hier noch mal ein Versuch, ein korrigiertes Beispiel zu posten:
              Code:
              <xsl:template match="cdata">
                <xsl:for-each select="str:tokenize(., '
              ')">
                   <xsl:value-of select="concat(format-number(position(), '00'), ' ', ., '
              ')"/>
                </xsl:for-each>
              </xsl:template>
              Da wo '
              ' auftaucht, sollte im Code '& # 10;' stehen, nur ohne die Leerzeichen, also einfach die Zeichenreferenz für das Zeichen lf mit Code 10.

              Comment


              • #8
                Das Leerzeichen hatte ich ich auch nicht gesehen. Es klappt fast, nur die Sache mit den Zeilenumbruch habe ich nicht im Griff

                Code:
                <xsl:stylesheet 
                 version="1.0"
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 xmlns:str="http://exslt.org/strings"
                 extension-element-prefixes="str">
                
                
                <xsl:template match="/">
                  <xsl:apply-templates/>
                </xsl:template>
                
                
                <xsl:template match="cdata">
                  <xsl:for-each select="str:tokenize(., '&#xD;')">
                     <xsl:value-of select="concat(format-number(position(), '00'), ' ', ., ' ')"/><br/>
                  </xsl:for-each>
                </xsl:template>
                
                
                
                </xsl:stylesheet>
                Code:
                &#xD;
                ist es nicht, was muss ich verwenden?

                Comment


                • #9
                  Verwende '& # 10;' bzw. '& # xA;' (nur ohne die Leerzeichen)
                  Zuletzt editiert von Martin Honnen; 14.04.2012, 19:05.

                  Comment


                  • #10
                    Danke

                    Hallo Martin, vielen Dank es klappt.

                    Aufgabe: Zeilennummerierung von Textblöcken bzw Quellcode
                    Lösung: textbr.xsl
                    Code:
                    <xsl:stylesheet 
                     version="1.0"
                     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                     xmlns:str="http://exslt.org/strings"
                     extension-element-prefixes="str">
                    
                    
                    <xsl:template match="/">
                      <xsl:apply-templates/>
                    </xsl:template>
                    
                    
                    <xsl:template match="cdata">
                      <xsl:for-each select="str:tokenize(., '
                    ')">
                         <xsl:value-of select="concat(format-number(position(), '00'), ' ', ., ' ')"/><br/>
                      </xsl:for-each>
                    </xsl:template>
                    
                    </xsl:stylesheet>
                    Testdaten:
                    Code:
                    <?xml version="1.0" encoding="ISO-8859-1"?>
                    <?xml-stylesheet type="text/xsl" href="textbr.xsl" ?>
                    <atom id="1">
                    <name id="2">NAME</name>
                    <desc id="3">TEXTINHALT DESC</desc>
                    <cdata id="4">Zeile A
                    Zeile B
                    Zeile C
                    </cdata>
                    <type id="5">htm</type>
                    </atom>

                    Comment

                    Working...
                    X