2009-11-24 2 views
1

Je commence en utilisant XSLT et écrire ce scipt:En utilisant XSLT comme lien xhtml extracteur

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" encoding="utf-8" /> 
<xsl:template match="span[@class='thumb']" > 
    Link: <xsl:value-of select="$base" /><xsl:value-of select="a/@href" /> 
</xsl:template> 

<xsl:template match="/"> 
    Base href: <xsl:value-of select="$base" /> 
    <xsl:apply-templates/> 
</xsl:template> 

</xsl:stylesheet> 

Et en utilisant cette commande:

xsltproc --html --param base "'http://example.com'" lista.xslt test.html 

Je dois obtenir la liste des liens, mais je reçois toute la page en sortie. Qu'est-ce qui ne va pas? Comment puis-je le faire fonctionner?

Répondre

3

Il existe des modèles par défaut qui ne sont pas visibles ici. Le moyen le plus simple de résoudre ce problème est de limiter explicitement aux éléments de portée que vous correspondez comme ci-dessous. Sinon, vous pouvez remplacer les modèles par défaut.

<xsl:template match="/"> 
    Base href: <xsl:value-of select="$base" /> 
    <xsl:apply-templates select="//span[@class='thumb']" /> 
</xsl:template> 
1

Il existe un modèle par défaut qui correspond essentiellement à tout si vous le laissez. Votre 4e dernière ligne appelle ce modèle.

Cela fait partie du problème. Le reste peut probablement être pris en charge en faisant correspondre exactement les choses que vous recherchez, directement dans le modèle de niveau supérieur.