2010-06-18 7 views
1

J'ai un menu avec trois industries et une option « active »:Changer la navigation entre les nœuds (XSLT)

<ul> 
<li id="p_active"><a href="active.xml">Active</a></li> 
<li id="p_education"><a href="education.xml">Education</a></li> 
<li id="p_energy"><a href="energy.xml">Energy</a></li> 
<li id="p_services"><a href="services.xml">Services</a> 
</li> 
</ul> 

Il y a un certain nombre de sociétés au sein de chaque industrie, en outre, chacun d'eux est soit « active "ou" Inactif ". En allant à la page d'une entreprise, il y a des boutons RETOUR et SUIVANT, qui navigueront à travers la liste principale des compagnies, vers la compagnie adjacente respective dans cette industrie.

(par exemple, la société ABC appartient à l'industrie de l'éducation, donc sur leur page, Back et Next iront aux autres entreprises du secteur de l'éducation). J'ai accompli cela en XSLT:

<xsl:choose> 
    <xsl:when test="(company[@ind='Education'])"> 
    <xsl:value-of select="document('invest-port.xml')/portfolio/company[name=$name]/following-sibling::company[@ind='Education'][1]/link"/> 
</xsl:when> 
    <xsl:when test="(company[@ind='Energy'])"> 
    <xsl:value-of select="document('invest-port.xml')/portfolio/company[name=$name]/following-sibling::company[@ind='Energy'][1]/link"/> 
</xsl:when> 
</xsl:choose> 

Exemple de fichier XML de l'entreprise:

<fragment> 
    <company ind="Education" stat="Active">Company ABC</company>  
    <hq>Boston, MA</hq> 
    <desc>This company makes products for schools</desc> 
</fragment> 

Cela fonctionne avec l'industrie comme la clé de tri par défaut, en fonction du code que j'ai écrit. Mon problème est le suivant: je veux faire en sorte que lorsque l'utilisateur clique sur "ACTIVE" dans le menu, les boutons Précédent et Suivant naviguent à travers les attributs @ status = "Actif", au lieu de par Industry.

Quelle est la meilleure façon d'aborder cela? J'ai regardé beaucoup de solutions différentes, mais je n'arrive pas à trouver la meilleure façon de le faire ... Merci!

Répondre

0

Tout d'abord, je voudrais essayer de se débarrasser de la choose et essayer d'utiliser une variable pour représenter l'industrie sélectionnée:

company[@ind = $ind] 

Ensuite, mettre un choose pour déterminer de quelle façon vous allez trouver la société suivante/précédente.

<xsl:choose> 
    <xsl:when test="$selectionMethod = 'Active'"> 
     <xsl:value-of select="document('invest-port.xml')/portfolio/company[name=$name]/following-sibling::company[@stat='Active'][1]/link"/> 
    </xsl:when> 
    <xsl:otherwise> 
     existing code 
    </xsl:otherwise> 
</xsl:choose> 
+0

Merci pour la réponse rapide. D'où obtenez-vous $ selectionMethod? Comment le code sait-il que j'ai accédé à ceci par le lien actif? –

+0

Juste pour un peu plus d'informations, lors de l'accès au fichier d'une entreprise, chaque page de l'entreprise utilise la même feuille de style XSL, où se déroule actuellement ce code. Alors, comment devrais-je dire à cette feuille de style que l'utilisateur veut naviguer d'une manière différente, selon le lien sur lequel il a cliqué? –

+0

Vous pouvez envoyer des paramètres à une feuille de style. Je ne connais pas votre implémentation exacte, mais ce serait un bon endroit pour le dire. –

Questions connexes