Hey,

I've been toying with XSLT tonight, which seems the fastest way to 
generate a TOC for the LiveDocs: it takes only 11 seconds on my box.

Attached is the stylesheet and here is how you use it (xmllint is 
introduced to make it readable :):

[EMAIL PROTECTED] phpdoc-all]$ time xsltproc xsl/toc.xsl manual.xml > 
/tmp/toc.tmp.xml; xmllint --format /tmp/toc.tmp.xml > /tmp/toc.xml 

real    0m11.196s
user    0m10.030s
sys     0m1.150s

once we have the toc we can parse it into sqllite.. I'm going to use the 
Nested Set/Visitation model* for that to maximize performance in finding 
paths and siblings.

regards,
Derick

* http://www.derickrethans.nl/phpperform/talk.html, slide 36-40

-- 

-------------------------------------------------------------------------
 Derick Rethans                                 http://derickrethans.nl/ 
 JDI Media Solutions                             http://www.jdimedia.nl/
 International PHP Magazine                      http://www.php-mag.net/
-------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">


<xsl:template match="book">
<toc>
        <title>
                <xsl:value-of select="title"/>
        </title>
        <xsl:apply-templates select="bookinfo"/>
        <xsl:apply-templates select="preface"/>
        <xsl:apply-templates select="part"/>
</toc>
</xsl:template>

<xsl:template match="bookinfo|preface">
<dir>
        <xsl:attribute name="title"><xsl:value-of select="title"/></xsl:attribute>
</dir>
</xsl:template>

<xsl:template match="part">
<part>
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <title>
                <xsl:value-of select="title"/>
        </title>
        <xsl:apply-templates select="chapter"/>
        <xsl:apply-templates select="reference"/>
        <xsl:apply-templates select="appendix"/>
</part>
</xsl:template>

<xsl:template match="chapter">
<chapter>
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <title>
                <xsl:value-of select="title"/>
        </title>
        <xsl:apply-templates select="sect1|section"/>
</chapter>
</xsl:template>

<xsl:template match="appendix">
<appendix>
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <title>
                <xsl:value-of select="title"/>
        </title>
        <xsl:apply-templates select="sect1"/>
</appendix>
</xsl:template>

<xsl:template match="reference">
<reference>
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <title>
                <xsl:value-of select="title"/>
        </title>
        <xsl:apply-templates select="section|refentry"/>
</reference>
</xsl:template>

<xsl:template match="section">
<sect1>
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <title>
                <xsl:value-of select="title"/>
        </title>
        <xsl:apply-templates select="section"/>
</sect1>
</xsl:template>

<xsl:template match="sect1">
<sect1>
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <title>
                <xsl:value-of select="title"/>
        </title>
        <xsl:apply-templates select="sect2"/>
</sect1>
</xsl:template>

<xsl:template match="sect2">
<sect2>
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <title>
                <xsl:value-of select="title"/>
        </title>
        <xsl:apply-templates select="sect3"/>
</sect2>
</xsl:template>

<xsl:template match="sect3">
<sect3>
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <title>
                <xsl:value-of select="title"/>
        </title>
        <xsl:apply-templates select="sect4"/>
</sect3>
</xsl:template>

<xsl:template match="sect4">
<sect4>
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <title>
                <xsl:value-of select="title"/>
        </title>
</sect4>
</xsl:template>

<xsl:template match="refentry">
<chapter>
        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        <title>
                <xsl:value-of select="refnamediv/refname"/>
        </title>
</chapter>
</xsl:template>
</xsl:stylesheet>

-- 
PHP Documentation Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to