IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XPath] Pb match et caractères spéciaux


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Homme Profil pro
    architecte java
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : architecte java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 13
    Points
    13
    Par défaut [XPath] Pb match et caractères spéciaux
    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

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    D'après ma lecture de la recommandation XML, le caractère | ne doit pas être utilisé dans un nom d'élément !

    Est-ce bien votre cas ? Pouvez-vous fournir l'extrait du HTML posant problème ?

    J'ai toujours l'habitude de transformer le HTML en XML avant de le parser. J'ai fait ma fonction par cela (http://sourceforge.net/projects/light-html2xml).

  3. #3
    Membre à l'essai
    Homme Profil pro
    architecte java
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : architecte java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Merci pour votre réponse, vous avez tout à fait raison, le caractère '|' n'a rien à faire dans les href. D'ailleurs, si on utilise la fonction java URI.create (String s) avec s qui contient des '|', ca plante.
    Le fichier html en question est généré par une application existante.
    Ce fichier html, déjà par très bien formé (manque des balises fermantes, des double quote par ex), a bien des href="url?paramètre1=qdsd||ABCD||&parametre2=sddfsfs".
    J'ai pensé rusé en transformant les '|' en %7C (équivalent html), reste à écrire un motif xpath qui me permet de capturer les '|' et la je coince...

Discussions similaires

  1. [XPath] Problème pour rechercher des caractères spéciaux
    Par JolyLoic dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 13/12/2006, 13h41
  2. Où trouver la liste des caractères spéciaux?
    Par gamez dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2003, 17h54
  3. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 10h38
  4. [Sybase] filtre sur caractères spéciaux
    Par montelieri dans le forum Sybase
    Réponses: 4
    Dernier message: 07/04/2003, 16h49
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo