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 :

[Docbook] Rechercher une section suivie d'un processus d'instruction [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut [Docbook] Rechercher une section suivie d'un processus d'instruction
    Bonsoir,

    Je travaille actuellement sur du Docbook. J'ai surchargé une XSL pour générer des pages HTML chaque fois qu'il rencontre le processus d'instruction <?dbhtml filename="nom_page_html.html"?> à coté d'une balise <sect1> ou <sect2>. Cela fonctionne très bien.

    Cependant j'ai un problème dans la navigation des pages avec les liens Back et Next qui ne pointent pas sur les pages HTML voulues.

    Voilà ma page initiale docbook:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <sect1><?dbhtml filename="p1.html"?>
       ...
       <sect2>
          ...
       </sect2>
       <sect2><?dbhtml filename="p2.html"?>
          ...
       </sect2>
       ...
    </sect1>
    Le problème est que lorsque je suis sur la page "p1.html", le lien Next pointe sur "p1.html" car la <sect2> qui suit est sur "p1.html".
    Je souhaiterai donc avoir sur "p1.html" le lien Next qui pointe donc sur la seconde "<sect2>" qui est sur "p2.html"

    l'XSL de docbook que je souhaite surcharger qui fait ce travail est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:variable name="next-v2"
        select="(descendant::sect2[$chunk.section.depth &gt; 0 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1])[1]"/>
    Je n'arrive à adapter cette partie de façon a récupérer à partir d'une section la prochaine section descendante qui a le processus d'instruction <?dbhtml filename="nom_page.html"?>

    Je suis vraiment bloqué.
    Je vous remercie de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut
    Pour donner un peu plus de précisions:

    la partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chunk.section.depth &gt; 0 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
    me retourne un booléen (0 ou 1)

    Du coup lorsque c'est égal à 1, j'ai le premier descendant de ma section courante.

    Je voudrais corriger cette partie pour avoir l'index de la prochaine section qui a le processus d'instruction <?dbhtml filename="nom_page.html"?>

    Quelqu'un a une idée ?

  3. #3
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Vous avez utiliser avec succès l'axe d'ancestor pour faire un contrôl sur la processing-instruction(), c'est dans la même ésprit que vous pourriez coder ce conditionnel. En gros, comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <xsl:variable name="next-v2"
        select="(descendant::sect2[
            $chunk.section.depth &gt; 0 
            and
            not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
            and
            descendant::processing-instruction('dbhtml')[normalize-space(substring-before(.,'='))='filename']
        ][1])[1]"/>

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut
    Merci beaucoup tsuji, ça marche parfaitement!

    Pour information, voici l'adaptation pour la gestion des liens précédents:

    cas: Le précédent de p2 est p1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <sect1><?dbhtml filename="p1.html"?>
       ...
       <sect2>
          ...
       </sect2>
       ...
    </sect1>
    <sect1><?dbhtml filename="p2.html"?>
       ...
    </sect1>
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <xsl:variable name="prev-v2"
        select="(preceding::sect2[
            $chunk.section.depth &gt; 1 
            and 
            not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking']) 
            and 
            processing-instruction('dbhtml')[normalize-space(substring-before(.,'='))='filename']
       ][1])[1]"/>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une recherche dans excel suivi d'un copier/coller
    Par Phoenix311 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/12/2012, 17h19
  2. Réponses: 0
    Dernier message: 10/07/2012, 14h33
  3. [CR] Supprimer une section
    Par Milou79 dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/09/2004, 11h51
  4. [CR 8.5] Supprimer une section à espaces
    Par franck.cvitrans dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 17/04/2004, 09h53
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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