Announcement

Collapse
No announcement yet.

<xsl:apply-templates select="html" /> wird nicht ausgeführt

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

  • <xsl:apply-templates select="html" /> wird nicht ausgeführt

    Hallo,

    ich wollte ein eigenes XSLT schreiben was HTML in FO konvertiert um Web-Seiten später über FOP in PDF oder TIFF umzuwandeln.

    Das XSLT reagiert jedoch nicht auf die Zeile 22
    Code:
     <?xml version="1.0" encoding="UTF-8"?>
     <xsl:stylesheet version="2.0"
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:fn="http://www.w3.org/2005/xpath-functions"
       xmlns:fo="http://www.w3.org/1999/XSL/Format">
    
       <xsl:output method="xml" version="1.0" encoding="UTF-8"
         indent="yes" omit-xml-declaration="yes"/>
    
       <xsl:include href="pagelayout.xslt" />
    
       <xsl:template match="/">
         <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    
          <xsl:call-template name="page-layout-A4" />
    
          <fo:page-sequence master-reference="A4">
             <fo:flow flow-name="xsl-region-body">
               <fo:block>
                 <!-- Daten für PDF -->
                 <xsl:apply-templates select="html" />
               </fo:block>
             </fo:flow>
    
           </fo:page-sequence>
         </fo:root>
       </xsl:template>
    
       <xsl:template match="html">
         <fo:block>
           <xsl:text>html</xsl:text>
         </fo:block>
       </xsl:template>
    
     </xsl:stylesheet>
    Das Zu bearbeitende Dokument ist eine HTML-Seite die vorher mit JTidy in ein gültiges XHTML-Dokument umgewandelt wurde. Hier mal die ersten Zeilen des XHTML-Dokumentes:
    Code:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <meta content="HTML Tidy for Java (vers. 26 Sep 2004), see www.w3.org"
          name="generator" />
        <title />
      </head>
      <body>
        Hallo Heiko,
        <br />
        [...]
      </body>
    </html>
    Ich hab die Transformation sowohl mit Saxon B8.9 wie auch mit Xalan 2.7.0 ausgeführt. Das Ergebnis sieht dann jeweils entsprechend aus:
    Code:
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
      <fo:root xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:fn="http://www.w3.org/2005/xpath-functions"
        xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <fo:layout-master-set>
        <fo:simple-page-master master-name="A4"
          page-height="29.7cm" page-width="21cm"
          margin-top="2cm" margin-bottom="2cm"
          margin-left="2cm" margin-right="0.5cm">
          <fo:region-body /> 
        </fo:simple-page-master>
      </fo:layout-master-set>
    
      <fo:page-sequence master-reference="A4">
        <fo:flow flow-name="xsl-region-body">
          <fo:block /> 
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
    In dieser Ausgabe Fehlt jedoch die Zeile 32 aus dem XSLT.

    Ich Poste hier auch mal die Debug-Ausgaben der Transformationen.
    Saxon:
    Code:
    <trace saxon-version="8.9" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <source node="/" line="0" file="012-message.xhtml">
      <xsl:template match="/" line="13" module="toPDF.xslt">
       <xsl:template name="page-layout-A4" line="5" module="pagelayout.xslt">
        <ATTR name="master-name" line="7" module="pagelayout.xslt">
        </ATTR>
        <ATTR name="page-height" line="7" module="pagelayout.xslt">
        </ATTR>
        <ATTR name="page-width" line="7" module="pagelayout.xslt">
        </ATTR>
        <ATTR name="margin-top" line="7" module="pagelayout.xslt">
        </ATTR>
        <ATTR name="margin-bottom" line="7" module="pagelayout.xslt">
        </ATTR>
        <ATTR name="margin-left" line="7" module="pagelayout.xslt">
        </ATTR>
        <ATTR name="margin-right" line="7" module="pagelayout.xslt">
        </ATTR>
       </xsl:template>
       <ATTR name="master-reference" line="18" module="toPDF.xslt">
       </ATTR>
       <ATTR name="flow-name" line="19" module="toPDF.xslt">
       </ATTR>
      </xsl:template>
     </source><!-- / -->
    </trace>
    und Xalan:
    Code:
    file:///D:/workspace/sdp/xhtml2pdf/testdata/../xslt/toPDF.xslt Line #13, Column #27: template match='/' 
    STARTDOCUMENT
    file:///D:/workspace/sdp/xhtml2pdf/xslt/pagelayout.xslt Line #5, Column #38: template name='page-layout-A4' 
    STARTELEMENT: fo:root
    STARTELEMENT: fo:layout-master-set
    STARTELEMENT: fo:simple-page-master
    STARTELEMENT: fo:region-body
    ENDELEMENT: fo:region-body
    ENDELEMENT: fo:simple-page-master
    ENDELEMENT: fo:layout-master-set
    STARTELEMENT: fo:page-sequence
    STARTELEMENT: fo:flow
    Selected source node '#document', at file 'file:///D:/workspace/sdp/xhtml2pdf/testdata/pdf/012-message.xhtml', line #-1, column #-1
    file:///D:/workspace/sdp/xhtml2pdf/testdata/../xslt/toPDF.xslt Line #22, Column #44: apply-templates, select='null': 
         [empty node list]
    STARTELEMENT: fo:block
    ENDELEMENT: fo:block
    ENDELEMENT: fo:flow
    ENDELEMENT: fo:page-sequence
    ENDELEMENT: fo:root
    ENDDOCUMENT
    
    
    --------- Umsetzung von pdf\012-message.xhtml über ..\xslt\toPDF.xslt betrug 1.051 Millisekunden
    Danke schon mal im vorraus
    Heiko

  • #2
    Re: &lt;xsl:apply-templates select=&quot;html&quot; /&gt; wird nicht ausgeführt

    Das funktioniert testweise in XMLSpy und an der Konsole mit XMLStarlet durchaus, wobei das Problem vermutlich durch das (unbekannte) einbundene Stylesheet pagelayout.xslt entsteht:

    Code:
    Ergebnis:
    ...
    <fo:page-sequence master-reference="A4">
      <fo:flow flow-name="xsl-region-body">
        <fo:block>
          <fo:block>html</fo:block>
        </fo:block>
      </fo:flow>
    </fo:page-sequence>
    Grüße,
    Thomas

    Comment


    • #3
      Das Stylesheet pagelayout.xslt liegt im selben Verzeichnis wie das besagt XSLT. In ihr ist jedoch nur das Layout für die spätere Transformation mit FOP angegeben.

      Bei dem Versuch bei mir mit XMLStarlet wurde jedoch auch wieder keine Bearbeitung der Zeile <xsl:apply-templates select="html" /> durchgeführt.

      Comment


      • #4
        Re: &lt;xsl:apply-templates select=&quot;html&quot; /&gt; wird nicht ausgeführt

        Deklariere und verwende den XHTML-Namensraum im Stylesheet:
        Code:
        <?xml version="1.0" encoding="UTF-8"?>
         <xsl:stylesheet version="2.0"
           xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:fn="http://www.w3.org/2005/xpath-functions"
           xmlns:fo="http://www.w3.org/1999/XSL/Format"
           xmlns:xhtml="http://www.w3.org/1999/xhtml"
           exclude-result-prefixes="xs fn xhtml">
        
           <xsl:output method="xml" version="1.0" encoding="UTF-8"
             indent="yes" omit-xml-declaration="yes"/>
        
        
           <xsl:template match="/">
             <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
        
              <fo:page-sequence master-reference="A4">
                 <fo:flow flow-name="xsl-region-body">
                   <fo:block>
                     <!-- Daten für PDF -->
                     <xsl:apply-templates select="xhtml:html" />
                   </fo:block>
                 </fo:flow>
        
               </fo:page-sequence>
             </fo:root>
           </xsl:template>
        
           <xsl:template match="xhtml:html">
             <fo:block>
               <xsl:text>html</xsl:text>
             </fo:block>
           </xsl:template>
        
         </xsl:stylesheet>
        Damit klappt es bei mir unter AltovaXML 2007 und Saxon 8.9.

        MfG,
        Thomas

        Comment


        • #5
          Danke für die Hilfe,

          hat jedoch auch nicht geklappt erst als ich das Encoding der XHTML-Datei auf UTF-8 änderte Funktionierte es. Wird wohl daran liegen das der Editor es als Unicode speicherte aber er XSLT-Processor es als ISO-8859-1 interpretieren wollte.

          Comment

          Working...
          X