|
|
|
<?xml version="1.0" encoding="iso-8859-15"?>
|
|
|
|
|
|
|
|
<!--
|
|
|
|
This file is freely distributable, created by Wilbert Berendsen (wbsoft@xs4all.nl)
|
|
|
|
|
|
|
|
This is just a simple XSLT file that converts some HTML pages to a XBEL bookmartdelist.
|
|
|
|
It is included here to test the new XSLT highlighting by Peter Lammich.
|
|
|
|
|
|
|
|
TODO: add better test file.
|
|
|
|
-->
|
|
|
|
|
|
|
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
|
|
|
|
xmlns:h="http://www.w3.org/1999/xhtml">
|
|
|
|
<xsl:output method="xml" encoding="iso-8859-15" indent="yes"
|
|
|
|
doctype-public="+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
|
|
|
|
doctype-system="http://www.python.org/topics/xml/dtds/xbel-1.0.dtd"
|
|
|
|
/>
|
|
|
|
|
|
|
|
<!-- main -->
|
|
|
|
<xsl:template match="/">
|
|
|
|
<xbel><folder><title>Linux at Home Links</title>
|
|
|
|
<xsl:for-each select="//*[@id='maincontents']//h:li">
|
|
|
|
<xsl:variable name="f" select="document(h:a/@href)/h:html"/>
|
|
|
|
<folder>
|
|
|
|
<title><xsl:value-of select="h:a/h:strong"/></title>
|
|
|
|
<desc><xsl:value-of select="normalize-space(h:a/text())"/></desc>
|
|
|
|
<xsl:for-each select="$f//h:div[@id='maincontents']">
|
|
|
|
<xsl:call-template name="getbookmarks"/>
|
|
|
|
</xsl:for-each>
|
|
|
|
|
|
|
|
</folder>
|
|
|
|
</xsl:for-each>
|
|
|
|
</folder></xbel>
|
|
|
|
</xsl:template>
|
|
|
|
<!-- end of main -->
|
|
|
|
|
|
|
|
<!-- get bookmarks from a page -->
|
|
|
|
<xsl:template name="getbookmarks">
|
|
|
|
|
|
|
|
<xsl:choose>
|
|
|
|
<!-- harvest links from p or li elements -->
|
|
|
|
<xsl:when test="self::h:li or self::h:p">
|
|
|
|
<xsl:variable name="t" select="normalize-space()"/>
|
|
|
|
<xsl:for-each select=".//h:a[1]">
|
|
|
|
<xsl:call-template name="bookmark">
|
|
|
|
<xsl:with-param name="desc" select="$t"/>
|
|
|
|
</xsl:call-template>
|
|
|
|
</xsl:for-each>
|
|
|
|
<xsl:for-each select=".//h:a[position()!=1]">
|
|
|
|
<xsl:call-template name="bookmark"/>
|
|
|
|
</xsl:for-each>
|
|
|
|
</xsl:when>
|
|
|
|
|
|
|
|
|
|
|
|
<xsl:otherwise>
|
|
|
|
<xsl:for-each select="*">
|
|
|
|
<xsl:call-template name="getbookmarks"/>
|
|
|
|
</xsl:for-each>
|
|
|
|
</xsl:otherwise>
|
|
|
|
|
|
|
|
</xsl:choose>
|
|
|
|
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
|
|
|
|
<xsl:template name="bookmark">
|
|
|
|
<xsl:param name="href" select="@href"/>
|
|
|
|
<xsl:param name="desc" select="''"/>
|
|
|
|
<xsl:param name="title" select="normalize-space()"/>
|
|
|
|
|
|
|
|
<xsl:variable name="realdesc">
|
|
|
|
<xsl:choose>
|
|
|
|
<xsl:when test="starts-with($desc,$title)">
|
|
|
|
<xsl:choose>
|
|
|
|
<xsl:when test="starts-with(translate(substring-after($desc,$title),',.;','...'),'.')">
|
|
|
|
<xsl:value-of select="substring($desc,string-length($title) + 2)"/>
|
|
|
|
</xsl:when>
|
|
|
|
<xsl:otherwise>
|
|
|
|
<xsl:value-of select="substring-after($desc,$title)"/>
|
|
|
|
</xsl:otherwise>
|
|
|
|
</xsl:choose>
|
|
|
|
</xsl:when>
|
|
|
|
<xsl:otherwise>
|
|
|
|
<xsl:value-of select="$desc"/>
|
|
|
|
</xsl:otherwise>
|
|
|
|
</xsl:choose>
|
|
|
|
</xsl:variable>
|
|
|
|
|
|
|
|
<bookmark>
|
|
|
|
<xsl:attribute name="href">
|
|
|
|
<xsl:choose>
|
|
|
|
<xsl:when test="starts-with($href,'http://') or starts-with($href,'ftp://') or starts-with($href,'mailto:')">
|
|
|
|
<xsl:value-of select="$href"/>
|
|
|
|
</xsl:when>
|
|
|
|
<xsl:otherwise>
|
|
|
|
<xsl:value-of select="concat('http://www.xs4all.nl/~wbsoft/linux/links/',$href)"/>
|
|
|
|
</xsl:otherwise>
|
|
|
|
</xsl:choose>
|
|
|
|
</xsl:attribute>
|
|
|
|
<title><xsl:value-of select="normalize-space($title)"/></title>
|
|
|
|
<xsl:if test="normalize-space($realdesc) != ''">
|
|
|
|
<desc><xsl:value-of select="normalize-space($realdesc)"/></desc>
|
|
|
|
</xsl:if>
|
|
|
|
</bookmark>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</xsl:stylesheet>
|