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>

Reply via email to