2010-11-09 12 views
1

Voici un exemple de ce que j'essaie de faire. XML:XSL: Comment limiter le select dans apply-templates basé sur un élément XML séparé

<TEST> 
    <NODE> 
    <A id="ELEMENT_1"/> 
    <A id="ELEMENT_2"/> 
    <A id="ELEMENT_3"/> 
    </NODE> 
    <SOME_OTHER_NODE> 
    <B nodeId="ELEMENT_1" invalid="1"/> 
    </SOME_OTHER_NODE> 
</TEST> 

XSL:

<xsl:apply-templates select="A[?? only select the A's where there is no B where A/@id = B/@nodeId and B/@invalid = 1 ??]"/> 

Est-ce même possible? Dans le xsl réelle que j'ai quelque chose comme ça actuellement:

<xsl:apply-templates select="(ANSWER|GROUP)[position() mod 2 = 0]"/> 

Je veux trouver un moyen de limiter la Répondons sélectionnée sur la base d'un autre élément dans le fichier XML. J'espère que j'ai clairement expliqué cela, laissez-moi savoir si je n'ai pas. Peut-être qu'il y a une meilleure façon de faire quelque chose comme ça. Je suis ouvert à tout commentaire ou suggestion. Merci.

Répondre

2

Cette expression XPath (comparaison de jeu de nœuds) avec NODE comme contexte:

A[not(@id = ../../SOME_OTHER_NODE/B[@invalid='1']/@nodeId)] 

Avec clés:

<xsl:key name="kInvalidTest" match="B[@invalid=1]" use="@nodeId"/> 
... 
<xsl:appy-templates select="A[not(key('kInvalidTest',@id))]"/> 
+0

fonctionne comme un charme. Je vous remercie! – testing123

+0

@ testing123: De rien! –

+0

Après avoir ajouté quelques éléments supplémentaires à SOME_OTHER_NODE, il ne fonctionne plus car isHidden correspond à plus d'un élément. Pensées? – testing123