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="{@alt}" src= "{@src}">
> <xsl:copy-of select="@id|@style|@class|@align|@usemap" />
> </figure>
> </xsl:when>
> <xsl:otherwise>
> <img alt="{@alt}" src= "{@src}">
> <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="{@href}">
> <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>
|
Try Searching:
servers, voip, java, networking, microsoft ...
|
|
|
|