2010-11-09 3 views
1

Je travaille sur la création d'un document XSL qui sera utilisé pour créer du code HTML basé sur un fichier XML. Je suis très nouveau dans le monde XML/XSL et je me bats avec même poser les bonnes questions. Voici une représentation grossière du fichier XML:XSL Node Traversal

<Item elemID="1" material="oak"></Item> 
<Item elemid="2" material="cedar"></Item> 
<Item elemid="3" material="spruce"></Item> 
<ColourType primary_object="1" secondary_object="100"></ColourType> 
<ColourType primary_object="2" secondary_object="101"></ColourType> 
<ColourType primary_object="3" secondary_object="102"></ColourType> 
<Colour id="100" name="Blue"></Colour> 
<Colour id="101" name="Red"></Colour> 
<Colour id="102" name="Yellow"></Colour> 

Je suis en mesure d'obtenir le nœud <Item> sans problème. Le défi que j'ai est de comprendre comment je peux rechercher le nœud <ColourType> et le nœud <Colour>.

Une partie de mon XSL ressemble à:

<xsl:variable name="ItemRef" select="//tcplm:Item/tcplm:GSIdentity[@elemId=$occrid]"/> 

Cela me donne le nœud <Item>, mais je suis perplexe quant à la façon dont je peux naviguer ou rechercher le nœud <ColourType>.

Pouvez-vous m'aider?

Merci,

Kevin

+0

quelqu'un peut me aider insérer mon fichier XML exemple ? Il semble avoir été abandonné lorsque j'ai sauvé mon message. –

+0

terminé, mais vous pouvez utiliser le bouton de code lors de l'insertion de code ou de tags. Sélectionnez le code/tag et cliquez sur le bouton avec le 01 dessus .. –

+0

Quel est le code html que vous voulez atteindre? –

Répondre

1

Il devrait être quelque chose comme

<xsl:variable name="clr" select="//Colour[@id=//ColourType[@primary_object=$occrid]/@secondary_object]/@name" /> 
+0

Merci pour votre aide Gaby, je l'ai eu pour travailler !! –

0

C'est FAQ: Chaque fois qu'il ya des références croisées, vous devez utiliser les touches

De http://www.w3.org/TR/xslt#key

Les clés permettent de travailler avec les documents qui contiennent une structure de référence croisée implicite . L'ID, types d'attribut IDREF et IDREFS dans XML fournit un mécanisme permettant aux documents XML de rendre leur référence croisée explicite. XSLT prend en charge cela via la fonction ID XPath .

On suppose ces clés déclarations:

<xsl:key name="kColourTypeByPrimary" match="ColourType" use="@primary_object"/> 
<xsl:key name="kColourById" match="Colour" use="@id"/> 

Ensuite, vous pouvez sélectionner le Colour pour votre contexte Item avec cette XPath/expression XSLT:

key('kColourById',key('kColourTypeByPrimary',@elemid)/@secondary_object)