Pour créer des Index
Jetez un œil sur le xml suivant. Il contient un niveau de fonction comportant un nœud de pièce et un conteneur de pièce avec un seul nœud de pièce :
<drofus-xml> <room-container> <room id="123"> <core name="foobar"/> </room> </room-container> <level> <room ref="123"/> </level> </drofus-xml> |
Je veux créer un rapport qui explore l'arborescence des départements et affiche les informations concernant les pièces au-dessous d'elles. La traversée a lieu en créant un paragraphe répétitif avec/drofus-xml/level comme expression xpath. Toutefois, le nœud de pièce situé sous le nœud de niveau n'est qu'un nœud de référence (ref node), ce qui signifie qu'il relie ou renvoie à un conteneur de pièce/nœud de pièce correspondant. Les nœuds de pièce sont utilisés pour éviter de doublonner les informations en plusieurs endroits du fichier xml. Le lien entre deux nœuds de pièce est que la valeur de l'attribut @ref est égale à la valeur de l'attribut @id.Lorsqu'on traverse le nœud de réf. de la pièce, il nous faut un moyen de récupérer le nœud de pièce correspondant puisqu'il contient toutes les données de la pièce. Pour ce faire, il faut créer un index. en insérant manuellement une expression xpath dans Review->Global XSLT window (Revue->Fenêtre XSLT globale).
<xsl:match key="room-index" match="room" use="@id"/> |
Cela crée un index appelé "room-index" (index de pièce) contenant tous les nœuds de la pièce dans le fichier xml contenant un attribut @id. Il est possible de créer plusieurs index dans le même document. Il leur faut seulement un nom unique.Dans notre rapport, je veux insérer un tableau répétitif indiquant le nom de la pièce pour toutes les pièces situées sous les niveaux. J'insère ensuite une zone avec l'expression xpath suivante :
key('room-index', @ref)/core/@name |
Je suis dans le contexte d'un nœud de réf. de pièce qui a un attribut @ref. En utilisant la valeur @ref, je récupère le nœud de pièce avec une valeur @id concordante tirée de l'index appelé "room-index". La clé de l'expression xpath ('room-index', @ref) renvoie le nœud de pièce et elle renferme un nœud central avec un attribut @name.
Important ! Le xsl dans un module pourrait nécessiter un ou plusieurs index à définir. Ceci peut se faire soit dans Review->Global XSLT Window (Revue ->Fenêtre XSLT Global) pour le module, soit dans le rapport principal en utilisant le module.