2010-06-24 5 views
2

Supposons que j'ai XML comme ceci:Sélection des noeuds en fonction des frères et soeurs critères de noeud en utilisant XSLT

<child_metadata> 
    <metadata> 
     <attributes> 
       <metadata_key value="include"/> 
       <metadata_value value="value1"/> 
     </attributes> 
    </metadata> 
    <metadata> 
     <attributes> 
       <metadata_key value="dont_include"/> 
       <metadata_value value="value2"/> 
     </attributes> 
    </metadata> 
    <metadata> 
     <attributes> 
       <metadata_key value="include"/> 
       <metadata_value value="value3"/> 
     </attributes> 
    </metadata> 
</child_metadata> 

En utilisant XSLT (sans aucune extension), je veux sélectionner uniquement les valeurs pour lesquelles la metadata_key est « inclure ». Donc, pour cet exemple, je veux sélectionner value1 et value3.

Comment faire?

Répondre

2

L'expression XPath à utiliser (pour un modèle ou dans une boucle for-each) serait:

//metadata_value[../metadata_key/@value='include']/@value 

Comme on ne sait pas ce que vous entendez par « select » Je ne peux pas poster un XSLT complet échantillon. XSLT est pour la transformation, pas la requête ("sélection" de données); la requête est faite avec des expressions XPath telles que celle que je vous ai fournie ci-dessus.

2

Pour l'ensemble de nœuds metadata_value, utilisez

//metadata/attributes[metadata_key/@value='include']/metadata_value 

ajouter @value pour obtenir les valeurs elles-mêmes.

0

Je pense que vous voulez

//atributes[metadata_key/@value='include']/metadata_vale/@value 

ou (comme après Lucero)

//metadata_value[../metadata_key/@value='include']/@value 

Mais, selon ce que vous voulez faire, vous devez utiliser les clés car ici est une référence croisée (metadata_key/@value est utilisé comme clé pour metadata_value/@value). Il est également bon d'éviter l'axe descendant.

0

Utilisation:

/child_metadata/metadata/attributes[metadata_key/@value='include']/metadata_value/@value 

En utilisant l'abréviation // a souvent une faible efficacité car cela provoque l'ensemble (sous) arbre à parcourir.

Questions connexes