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 :

[XSLT] Récupération de texte après une balise


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut [XSLT] Récupération de texte après une balise
    Bonjour,

    Je travail sur une feuille de style XSLT de conversion de page HTML en format wiki. Et je sèche sur un problème.

    J'ai des balises qui sont imbriquées les une dans les autres et parfois il y a du texte de part et d'autre d'une balise.

    Regardons l'exemple suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p>When implementing a new widget, it is almost always useful to reimplement <a href="qwidget.html#sizeHint-prop">sizeHint</a>() to provide a reasonable default size for the widget and to set the correct size policy with <a href="qwidget.html#sizePolicy-prop">sizePolicy</a>.</p>
    J'aimerais pouvoir tester ce qui se trouve juste après la balise </a> pour savoir s'il y a une paire de parenthèse ou non. Car si elle est présente, je voudrais la faire rentrer à l'intérieur de mon lien wiki (donc dans mon template qui traite la balise <a>).

    Dans le cas ci-dessus, j'ai un template qui match la balise <p> avec un apply template à l'intérieur qui matchera la balise <a> sauf que j'aimerais dans ce second template (celui de la balise <a>), faire un test sur ce qui se trouve après la balise </a> fermante.

    En espérant avoir été assez claire et en vous remerciant pour votre aide.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 563
    Points : 21 627
    Points
    21 627
    Par défaut
    Si j'ai bien compris, c'est précisément l'intérêt de l'axe following-sibling. Dans le cas présent, on veut tester le début de la valeur texte du prochain nœud, que ce soit un nœud élément ou texte*. Il faudrait donc utiliser following-sibling::node()

    Un truc genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xs:template match="a">
      <xs:if
        test="starts-with(following-sibling::node(), '()')"
        >
        ...
      </xs:if>
    </xs:template>
    * Les choses deviennent plus compliquées s'il peut y avoir des nœuds vides entre l'élément <a> et les parenthèses. Et abominablement compliquées si les parenthèses peuvent être dans deux nœuds frères différents.

  3. #3
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Merci, ça marche bien mais j'ai du rajouter un [1] sinon j'avais une erreur de cardinalité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    following-sibling::node()[1]
    Tu sais comment je pourrais les supprimer du nœud texte en question par la suite (maintenant qu'elles sont dans le lien) ?

  4. #4
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Citation Envoyé par johnlamericain Voir le message
    Tu sais comment je pourrais les supprimer du nœud texte en question par la suite (maintenant qu'elles sont dans le lien) ?
    Je vais essayer d'être plus clair sur ma dernière question toujours en suspens.

    J'ai du code HTML ressemblant à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p>See also <a href="qprogressdialog.html#setCancelButtonText">setCancelButtonText</a>().</p>
    Cependant, je voudrais que les parenthèses qui se trouve dans le code HTML en dehors de la balise <a> se retrouve à l'intérieur de celle du lien wiki.

    J'utilise donc le code suivant dans le template de <a> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="starts-with(following-sibling::node()[1], '()')">
       <xsl:text xml:space="preserve">()</xsl:text>
    </xsl:if>
    du coup maintenant j'ai du code avec les parenthèses dans et en dehors du lien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    See also [[qprogressdialog#setCancelButtonText|setCancelButtonText()]]().
    J'aimerais pouvoir supprimé ces parenthèses se trouvant en début de nœud text() d'une balise <p> (il peut y avoir x nœud text() pour chaque balise <p>) si celui-ci est précédé d'une balise <a>.

    J'ai essayé différente transformation de style sans grand succès...

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 563
    Points : 21 627
    Points
    21 627
    Par défaut
    Supprimer est impossible... On peut seulement choisir de ne pas ajouter.

    En gros, retenir qu'on vient d'ajouter des parenthèses qui se trouvent dans le nœud suivant, et au moment d'insérer ce nœud suivant, insérer tout, sauf les deux premiers caractères qui sont les parenthèses.
    La fonction substring() doit pouvoir faire ça. Oui, ça devient compliqué.

Discussions similaires

  1. [Toutes versions] extraire les données texte d'un fichier .inf après une [balise]
    Par yayafire34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/05/2011, 17h00
  2. [XSLT]problème d'appel de texte dans une balise à partir d'un attribut
    Par docteur chépère dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/01/2007, 10h57
  3. [XSLT] Récupérer le texte d'une "documentation"
    Par ploxien dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/06/2006, 10h58
  4. [D6 => XML] Récupération de données dans une balise
    Par Bason_sensei dans le forum Delphi
    Réponses: 10
    Dernier message: 22/05/2006, 17h15
  5. [XSLT] inclure du XSL dans une balise html
    Par iaa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2002, 15h57

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