Bonjour,
n'étant pas un spécialiste du Xpath, j'aurais besoin d'un peu d'aide.
Je dois appliquer une stylesheet sur des fichiers html.
Mon problème est que ce fichier html a des liens avec une chaîne de caractères qui contient le motif ||ABCD|| (ABCD, c'est pour l'exemple, c'est les '|' qui posent problème).
La stylesheet de base ressemble à ca :
C'est dans le identity template (à la fin de la stylesheet) que ca plante.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlnssl="http://www.w3.org/1999/XSL/Transform"
xmlns:bridge="java:org.portletbridge.portlet.BridgeFunctions"
extension-element-prefixes="bridge">
<!-- @author rickard -->
<!-- @author jamie -->
<xsl:output method="html"
encoding="UTF-8"
indent="yes"
standalone="no"
omit-xml-declaration="yes"/>
<xsl:param name="bridge"/>
<xsl:variable name="base" select="/HTML/HEAD/BASE/@href"/>
<!-- Fetch some info from head, and all of body -->
<xsl:template match="/HTML">
<xsl:apply-templates select="HEAD"/>
<xsl:apply-templates select="BODY"/>
</xsl:template>
<xsl:template match="/HTML/HEAD">
<xsl:apply-templates select="STYLE"/>
<xsl:apply-templates select="LINK[bridge:equalsIgnoreCase($bridge, @rel, 'stylesheet') and (not(@media) or @media != 'print')]"/>
<xsl:apply-templates select="SCRIPT"/>
<xsl:apply-templates select="TITLE"/>
</xsl:template>
<xsl:template match="/HTML/HEAD/TITLE">
<xsl:value-of select="bridge:setTitle($bridge, text())"/>
</xsl:template>
<xsl:template match="/HTML/BODY">
<DIV>
<xsl:attribute name="class">
<xsl:value-of select="@class"/>
</xsl:attribute>
<SCRIPT>
<xsl:value-of select="@onload"/>
</SCRIPT>
<xsl:apply-templates select="node()"/>
</DIV>
</xsl:template>
<!-- Rewrite links -->
<xsl:template match="A/@href">
<xsl:attribute name="href">
<xsl:value-of select="bridge:link($bridge, $base, .)"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="A/@onclick">
<xsl:attribute name="onclick">
<xsl:value-of select="bridge:script($bridge, $base, .)"/>
</xsl:attribute>
</xsl:template>
<!-- Rewrite script links -->
<xsl:template match="SCRIPT/@src">
<xsl:attribute name="src">
<xsl:value-of select="bridge:link($bridge, $base, .)"/>
</xsl:attribute>
</xsl:template>
<!-- Rewrite image references -->
<xsl:template match="IMG/@src">
<xsl:attribute name="src">
<xsl:value-of select="bridge:link($bridge, $base, .)"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="INPUT/@src">
<xsl:attribute name="src">
<xsl:value-of select="bridge:link($bridge, $base, .)"/>
</xsl:attribute>
</xsl:template>
<!-- Rewrite imagemap references -->
<xsl:template match="MAP/AREA/@href">
<xsl:attribute name="href">
<xsl:value-of select="bridge:link($bridge, $base, .)"/>
</xsl:attribute>
</xsl:template>
<!-- Copy style tags from head -->
<xsl:template match="/HTML/HEAD/STYLE">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:value-of select="bridge:style($bridge, $base, .)"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@style">
<xsl:attribute name="style">
<xsl:value-of select="bridge:style($bridge, $base, .)"/>
</xsl:attribute>
</xsl:template>
<!-- Copy script tags from head -->
<xsl:template match="/HTML/HEAD/SCRIPT[@src]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="src">
<xsl:value-of select="bridge:link($bridge, $base, @src)"/>
</xsl:attribute>
</xsl:copy>
</xsl:template>
<xsl:template match="/HTML/HEAD/SCRIPT/text()">
<xsl:value-of select="bridge:script($bridge, $base, .)"/>
</xsl:template>
<!-- Convert link tags in head to style tags -->
<xsl:template match="/HTML/HEAD/LINK">
<style type="text/css">@import "<xsl:value-of select="bridge:link($bridge, $base, @href)"/>";
</style>
</xsl:template>
<xsl:template match="FORM/@action">
<xsl:attribute name="action">
<xsl:value-of select="bridge:link($bridge, $base, .)"/>
</xsl:attribute>
</xsl:template>
<!-- Identity template -->
<xsl:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Je pensais donc enlever les '|' avant le passage du template identity puis les remettre.
Problème, j'arrive pas à manipuler le '|'
J'ai essayé
<xsl:template match="||ABCD||">ABCD </xsl:template>
<xsl:template match="\|\|ABCD\|\|">ABCD </xsl:template>
<xsl:template match="\\|\\|ABCD\\|\\|">ABCD </xsl:template>
Merci par avance
Partager