Obtenir la position d'un noeud

Obtenir la position d'un noeud - XML/XSL - Programmation

Marsh Posté le 26-09-2006 à 18:05:12    

Bonjour à tous,
 
pour le moment, j'ai la structure XML suivante:
 

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <Racine>
  3. <Item titre="Exécuter" lien="TMainForm.htm" id="0" />
  4. <Chapitre titre="Analyses" lien="" id="1">
  5.  <Retrait>
  6.   <Chapitre titre="Enregistrer les statistiques et les stratégies" lien="" id="2">
  7.    <Retrait>
  8.     <Chapitre titre="Créer un nouveau séquençage" lien="" id="3">
  9.      <Retrait>
  10.       <Item titre="Premières informations" lien="" id="4" />
  11.       <Item titre="Equipe à domicile" lien="" id="5" />
  12.       <Item titre="Equipe à l'extérieur" lien="" id="6" />
  13.       <Item titre="Options d'enregistrement" lien="" id="7" />
  14.      </Retrait>
  15.     </Chapitre>
  16.    </Retrait>
  17.   </Chapitre>
  18.  </Retrait>
  19. </Chapitre>
  20. </Racine>


 
Avec le XSL suivant (uniquement le template pour Item)
 

Code :
  1. <xsl:template match="Item">
  2.     <div>
  3.  <img src="../../Images/dot.gif" alt="" />
  4.  <a href="#" onclick="showhide(document.getElementById('d{@id}'),'swap'); ajax_loadContent('d{@id}','{@lien}'); return false">
  5.   <xsl:value-of select="@titre" />
  6.  </a>
  7.  <div id="d{@id}" class="box" style="display:none;"></div>
  8. </div>
  9. </xsl:template>


 
Comme vous pouvez le voir, j'utilise l'attribut id des noeuds pour générer un cadre invisible avec une id unique, que je mets à jour avec AJAX.
 
Bref, ce que je me demandais, c'est s'il est possible que je me passe des attributs id dans le XML, et donc utiliser une fonction XSL qui me retourne l'index du noeud actuel, par rapport à la racine du XML.
 
J'ai essayé de le récupérer grâce à <xsl:value-of select="position()" />, mais ça n'indique que l'index par rapport au noeud père (et par incréments de 2  :??: )
 
Merci d'avance
 
Mike

Reply

Marsh Posté le 26-09-2006 à 18:05:12   

Reply

Marsh Posté le 27-09-2006 à 08:56:59    

Si c'est un simple id que tu veux, il existe la fonction generate-id().

Reply

Marsh Posté le 28-09-2006 à 17:36:09    

Bon en fait je viens de remarquer que la fonction generate-id() me renvoie un id différent pour chaque noeud chaque fois que je réactualise la page.
 
J'ai vu la fonction <xsl:number>, mais j'ai un petit souci avec...
 
Je l'utilise comme suit:
 

Code :
  1. <div class="box" style="display:none;">
  2.   <xsl:attribute name="id">
  3.     <xsl:number level="any" count="Item|Chapitre" format="1" />
  4.   </xsl:attribute>
  5. </div>


 
Seulement il me sort du HTML avec des espaces dont je ne veux pas:
 

Code :
  1. <div class="box" style="display:none;" id="
  2.       d5"></div>


 
et moi je veux ça:
 

Code :
  1. <div class="box" style="display:none;" id="d5"></div>


 
Comment je peux faire ça?
 
J'ai essayé d'utiliser <xsl:text> mais sans succès...

Reply

Marsh Posté le 28-09-2006 à 17:49:04    

Code :
  1. <div class="box" style="display:none;">
  2.   <xsl:attribute name="id"><xsl:number level="any" count="Item|Chapitre" format="1" /></xsl:attribute>
  3. </div>


 [:spamafote]

Reply

Marsh Posté le 29-09-2006 à 00:16:31    

C'est pas ça. J'aimerai un 'd' avant l'id du noeud ;)
 
Et les espaces qu'il met entre le 'd' et l'id fait merder le reste...


Message édité par haazheel le 29-09-2006 à 00:17:05
Reply

Marsh Posté le 29-09-2006 à 09:49:50    

comprends pas. "tu veux un 'd' avant l'id du noeud ? késako ?
 
Par contre, transformer :  

<div class="box" style="display:none;" id="                
d5"></div>


 
en

<div class="box" style="display:none;" id="d5"></div>


 
c'est juste un problème d'espace + retour à la ligne à l'intérieur de ton attribut :spamafote:

Reply

Marsh Posté le 29-09-2006 à 13:33:24    

MagicBuzz a écrit :

comprends pas. "tu veux un 'd' avant l'id du noeud ? késako ?
 
Par contre, transformer :  

<div class="box" style="display:none;" id="                
d5"></div>


 
en

<div class="box" style="display:none;" id="d5"></div>


 
c'est juste un problème d'espace + retour à la ligne à l'intérieur de ton attribut :spamafote:


 
Le code que tu m'as donné  

Code :
  1. <div class="box" style="display:none;">
  2.     <xsl:attribute name="id"><xsl:number level="any" count="Item|Chapitre" format="1" /></xsl:attribute>
  3. </div>


 
sort le HTML suivant:
 

Code :
  1. <div class="box" style="display:none;" id="5"></div>


 
Or moi je voudrais ça:
 

Code :
  1. <div class="box" style="display:none;" id="d5"></div>


 
Mais j'ai ça:
 

Code :
  1. <div class="box" style="display:none;" id="
  2.                 d5"></div>

Reply

Marsh Posté le 06-10-2006 à 16:03:37    

Code :
  1. <div class="box" style="display:none;">
  2.     <xsl:attribute name="id">d<xsl:number level="any" count="Item|Chapitre" format="1" /></xsl:attribute>
  3. </div>


:spamafote:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed