I', processing the document below with Xalan and the template below experience a funny effect that I cannot explain.
As long as I have the <!DOCTYPE-element in my document, processing will correctly go as far as > <xsl:template match="/"> >> <xsl:choose> >> <xsl:when test="name(child::node())='html'"> >> <xsl:apply-templates/> >> </xsl:when> but then apply templates will ignore the correct template > <xsl:template match="html"> and jump to the default template right at the bottom <xsl:template match="@*|*|text()|processing-instruction()|comment()"> and mess up the transformation. As soon as I remove the <!DOCTYPE-element everything works just fine. Can anybody tell me what I'm missing here? Thanks, Ferdinand Document > <?xml version="1.0" encoding="ISO-8859-1"?> > <!DOCTYPE html > PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> > <html> > <!-- Diese Datei ist die Leitseite des Kursprogramms und muss händisch > gepflegt werden --> > <head> > <title>Leitseite Gesamtprogramm</title> > </head> > <body > class="Leitseite_Gesamtprogramm"> > <h1>Leitseite Gesamtprogramm</h1> > <?php phpinfo(); > ?> > <p > class="Absatz">Sie befinden sich auf der Leitseite des > Gesamtprogramms des Bildungsvereins Hannover. </p> > <p > class="Absatz">Herzlich willkommen! </p> > </body> > </html> Template > <?xml version="1.0"?> > <xsl:stylesheet > version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <xsl:key name="h2s" match="h2" > use="generate-id(preceding-sibling::h1[1])"/> > <xsl:key name="h3s" match="h3" > use="generate-id(preceding-sibling::h2[1])"/> > <xsl:key name="h4s" match="h4" > use="generate-id(preceding-sibling::h3[1])"/> > <xsl:key name="h5s" match="h5" > use="generate-id(preceding-sibling::h4[1])"/> > <xsl:key name="h6s" match="h6" > use="generate-id(preceding-sibling::h5[1])"/> > > <xsl:template match="/"> > <xsl:choose> > <xsl:when test="name(child::node())='html'"> > <xsl:apply-templates/> > </xsl:when> > <xsl:otherwise> > <document> > <header><title>Error in conversion</title></header> > <body> > <warning>This file is not in a html format, please convert > manually.</warning> > </body> > </document> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > <xsl:template match="html"> > <document> > <xsl:apply-templates/> > </document> > </xsl:template> > > <xsl:template match="head"> > <header> > <xsl:apply-templates/> > </header> > </xsl:template> > > <xsl:template match="meta"> > <xsl:copy> > <xsl:apply-templates select="node()|@*"/> > </xsl:copy> > </xsl:template> > > <!--infer structure from sibling headings--> > <xsl:template match="body"> > <body> > <xsl:apply-templates select="*[1]" mode="next"/> > <xsl:call-template name="process_h1"/> > </body> > </xsl:template> > > <!-- process all of documents content --> > <xsl:template name="process_h1"> > <!-- start with each h1-heading --> > <xsl:for-each select="h1"> > <!-- wrap a section all around it's content --> > <section> > <xsl:choose> > <xsl:when test="a/@name"> > <xsl:attribute name="id"><xsl:value-of > select="a/@name"/></xsl:attribute> > <xsl:copy-of select="@style|@class" /> > </xsl:when> > <xsl:otherwise> > <xsl:copy-of select="@id|@style|@class" /> > </xsl:otherwise> > </xsl:choose> > > <!-- process heading text as title --> > <title><xsl:apply-templates/></title> > <!-- process all non heading elements following the heading --> > <xsl:apply-templates select="following-sibling::*[1]" mode="next"/> > <!-- then process all second level headings within this first > level heading --> > <xsl:for-each select="key('h2s',generate-id(.))"> > <section> > <xsl:copy-of select="@id|@style|@class" /> > <title><xsl:apply-templates/></title> > <xsl:apply-templates select="following-sibling::*[1]" > mode="next"/> > <xsl:for-each select="key('h3s',generate-id(.))"> > <section> > <xsl:copy-of select="@id|@style|@class" /> > <title><xsl:apply-templates/></title> > <xsl:apply-templates select="following-sibling::*[1]" > mode="next"/> > <xsl:for-each select="key('h4s',generate-id(.))"> > <section> > <xsl:copy-of select="@id|@style|@class" /> > <title><xsl:apply-templates/></title> > <xsl:apply-templates select="following-sibling::*[1]" > mode="next"/> > <xsl:for-each select="key('h5s',generate-id(.))"> > <section> > <xsl:copy-of select="@id|@style|@class" /> > <title><xsl:apply-templates/></title> > <xsl:apply-templates > select="following-sibling::*[1]" > mode="next"/> > <xsl:for-each select="key('h6s',generate-id(.))"> > <section> > <xsl:copy-of select="@id|@style|@class" /> > <title><xsl:apply-templates/></title> > <xsl:apply-templates > select="following-sibling::*[1]" mode="next"/> > </section> > </xsl:for-each> > </section> > </xsl:for-each> > </section> > </xsl:for-each> > </section> > </xsl:for-each> > </section> > </xsl:for-each> > </section> > </xsl:for-each> > </xsl:template> > > <!--process each sibling in order until the next heading level--> > > <xsl:template match="*" mode="next"> > <xsl:if test="not( translate( local-name(.),'123456','' ) = 'h' )"> > <xsl:apply-templates select="."/> > <xsl:apply-templates select="following-sibling::*[1]" mode="next"/> > </xsl:if> > </xsl:template> > > <xsl:template match="P|p"> > <p> > <xsl:if test="@class"> > <xsl:attribute name="class"><xsl:value-of > select="@class"/></xsl:attribute> > </xsl:if> > <xsl:copy-of select="@id|@style" /> > <xsl:apply-templates/> > </p> > </xsl:template> > > <xsl:template match="img"> > > <xsl:choose> > <xsl:when test="name(..)='section'"> > <figure alt="[EMAIL PROTECTED]" src= "[EMAIL PROTECTED]"> > <xsl:copy-of select="@id|@style|@class|@align|@usemap" /> > </figure> > </xsl:when> > <xsl:otherwise> > <img alt="[EMAIL PROTECTED]" src= "[EMAIL PROTECTED]"> > <xsl:copy-of select="@id|@style|@class|@align|@usemap" /> > </img> > </xsl:otherwise> > </xsl:choose> > > </xsl:template> > > <xsl:template match="source|blockquote"> > <xsl:choose> > <xsl:when test="name(..)='p'"> > <code> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:value-of select="." /> > </code> > </xsl:when> > > <xsl:otherwise> > <source> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:value-of select="." /> > </source> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > > <!-- convert a to link --> > <xsl:template match="a"> > > <xsl:if test="@name"> > <!-- Attach an id to the current node --> > <xsl:attribute name="id"><xsl:value-of select="translate(@name, ' $', > '__')"/></xsl:attribute> > <xsl:apply-templates/> > </xsl:if> > <xsl:if test="@href"> > <link href="[EMAIL PROTECTED]"> > <xsl:copy-of select="@id|@class|@target|@onclick|@title" /> > <xsl:apply-templates/> > </link> > </xsl:if> > > </xsl:template> > > <xsl:template match="@valign | @align"/> > > <xsl:template match="center"> > <xsl:choose> > <xsl:when test="name(..)='p'"> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:apply-templates/> > </xsl:when> > > <xsl:otherwise> > <p> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:apply-templates/> > </p> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > <xsl:template match="ol"> > <xsl:choose> > <xsl:when test="name(..)='p'"> > <xsl:text disable-output-escaping="yes"><![CDATA[</p>]]></xsl:text> > <ol> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:apply-templates/> > </ol> > <xsl:text disable-output-escaping="yes"><![CDATA[<p>]]></xsl:text> > </xsl:when> > <xsl:otherwise> > <ol> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:apply-templates/> > </ol> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > <xsl:template match="ul"> > <xsl:choose> > <xsl:when test="name(..)='p'"> > <xsl:text disable-output-escaping="yes"><![CDATA[</p>]]></xsl:text> > <ul> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:apply-templates/> > </ul> > <xsl:text disable-output-escaping="yes"><![CDATA[<p>]]></xsl:text> > </xsl:when> > <xsl:otherwise> > <ul> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:apply-templates/> > </ul> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > <xsl:template match="b"> > <strong> > <xsl:value-of select = "."/> > </strong> > </xsl:template> > > <xsl:template match="i"> > <em> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:value-of select = "."/> > </em> > </xsl:template> > > <xsl:template match="u"> > <u> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:value-of select = "."/> > </u> > </xsl:template> > > <xsl:template match="table"> > <xsl:copy> > <xsl:copy-of select="@*"/> > <xsl:apply-templates/> > </xsl:copy> > </xsl:template> > > > <xsl:template match="br"> > <xsl:choose> > <xsl:when test="normalize-space(text())"> > > <xsl:choose> > <xsl:when test="name(..)='p'"> > > <xsl:apply-templates/> > <br> > <xsl:copy-of select="@id|@style|@class" /> > </br> > </xsl:when> > <xsl:otherwise> > <p> > <xsl:apply-templates/> > </p> > </xsl:otherwise> > </xsl:choose> > > </xsl:when> > <xsl:otherwise> > <br> > <xsl:copy-of select="@id|@style|@class" /> > </br> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > <!-- Strip --> > <xsl:template match="font|big"> > <xsl:copy-of select="@id|@style|@class" /> > <xsl:apply-templates/> > </xsl:template> > > > > > > <xsl:template match="@*|*|text()|processing-instruction()|comment()"> > <xsl:message><xsl:value-of select="name(.)"/></xsl:message> > <xsl:copy> > <xsl:apply-templates > select="@*|*|text()|processing-instruction()|comment()"/> > </xsl:copy> > </xsl:template> > > > </xsl:stylesheet>