Announcement

Collapse
No announcement yet.

Mittels XSLT einen Zeilenumbruch in XHTML darstellen

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

  • Mittels XSLT einen Zeilenumbruch in XHTML darstellen

    Liebes Forum,

    ich bin Anfänger in XML/XSLT, neu in diesem Forum und möchte mich langfristig in TEI (Text Encoding Initiative) XML einarbeiten, das in den Geisteswissenschaften zur Auszeichnung aller Arten literarischer Texte verwendet wird.

    Mein Problem ist vermutlich eine FAQ, aber trotzdem finde ich nicht die richtigen Stichworte, um eine Lösung recherchieren zu können.

    Folgende xml-Beispiel-Datei möchte in XHTML darstellen, wobei der leere tag <zeilenumbruch/> durch den XHTML-Tag <br/> ersetzt werden soll:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="test.xsl"?>
    <text>
      <ueberschrift>Überschrift</ueberschrift>
      <inschrift>
        Das ist eine Zeile.
        <zeilenumbruch/>
        Das ist noch eine Zeile.
        <zeilenumbruch/>
        Das ist eine dritte Zeile.
      </inschrift>
    </text>
    Ich habe mich an einem Beispiel aus dem Internet orientiert versuche es mit folgendem Stylesheet test.xsl:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:html="http://www.w3.org/1999/xhtml">
    
    <xsl:template match="/">
      <html>
        <head/>
        <body>
          <xsl:apply-templates/>
        </body>
      </html>
    </xsl:template>
    
    <xsl:template match="text">
      <xsl:element name="h1">
        <xsl:value-of select="ueberschrift"/>
      </xsl:element>
      <xsl:element name="p">
        <xsl:value-of select="inschrift"/>
      </xsl:element>
    </xsl:template>
    
    <xsl:template match="text/inschrift">
      <xsl:element name="br">
        <xsl:apply-templates select="zeilenumbruch"/>
      </xsl:element>
    </xsl:template>
    
    </xsl:stylesheet>
    Leider wird der Zeilenumbruch im Browser nicht dargestellt, und in dem vom Browser erzeugten Code taucht dementsprechend kein <br/> auf:

    Code:
    <html><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"></head><body><h1>Überschrift</h1><p>
        Das ist eine Zeile.
        
        Das ist noch eine Zeile.
        
        Das ist eine dritte Zeile.
      </p></body></html>
    Wo liegt mein Fehler? Über Hilfe würde ich mich sehr freuen!

    Herzliche Grüße,

    Peisistratos
    Zuletzt editiert von peisistratos; 18.12.2010, 18:13.

  • #2
    Wenn du ein "zeilenumbruch"-Element in ein HTML-"br"-Element umwandeln willst, dann solltest du dafür ein passendes Template schreiben. Für andere Elemente auch, dann per apply-templates sicherstellen, dass die Elemente verarbeitet werden:
    Code:
    <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    
    <xsl:template match="/">
      <html>
        <head/>
        <body>
          <xsl:apply-templates/>
        </body>
      </html>
    </xsl:template>
    
    <xsl:template match="ueberschrift">
      <h1><xsl:apply-templates/></h1>
    </xsl:template>
    
    <xsl:template match="inschrift">
      <p><xsl:apply-templates/></p>
    </xsl:template>
    
    <xsl:template match="zeilenumbruch">
      <br/>
    </xsl:template>
    
    </xsl:stylesheet>
    Ergebnis ist dann
    Code:
    <html>
       <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       </head>
       <body>
    
          <h1>&Uuml;berschrift</h1>
    
          <p>
             Das ist eine Zeile.
                 <br>
                 Das ist noch eine Zeile.
                 <br>
                 Das ist eine dritte Zeile.
    
          </p>
    
       </body>
    </html>

    Comment


    • #3
      Ich danke herzlich für die Hilfe!

      Grüße, Peisistratos

      Comment

      Working...
      X