2011-09-28 3 views
0

Étant donné que le chemin /XML/Staff/Content/ContentXML/StaffProfile/Role est correct, et que j'ai 5 /XML/Staff avec un seul membre du personnel avec le rôle de « partenaire »Quel est le problème avec ce XPath?

Pourquoi ce match tous les 5 membres du personnel ne?

<xsl:apply-templates select="/XML/Staff[Content/ContentXML/StaffProfile/Role='Partner']" mode="List"/> 
+0

est le rôle d'un attribut ou un élément? –

+0

Rôle est un élément – johnwards

+0

Ensuite, vous devez faire '/ text()' pour sélectionner uniquement le nœud de texte de 'Role', puisque l'élément' Role' lui-même n'est pas égal à la chaîne ''Partner''; comme j'ai répondu ci-dessous. –

Répondre

2

Je ne l'ai pas vu votre XML (que vous devez poster pour être complet), mais je suppose que Role est un élément XML et si tel est le cas, la comparant à une chaîne ne fonctionnera pas. Essayez ceci:

<xsl:apply-templates 
    select="/XML/Staff[Content/ContentXML/StaffProfile/Role/text()='Partner']" 
    mode="List" /> 

Si Role est un attribut, vous devez faire ceci:

<xsl:apply-templates 
    select="/XML/Staff[Content/ContentXML/StaffProfile/@Role='Partner']" 
    mode="List" /> 
+0

Testait cela à http://www.mizar.dk/XPath/Default.aspx et quand je suis revenu la réponse attendait :) –

+1

Merci les gars! Je suis parti de XML pendant un an, donc text() a complètement chamboulé mon esprit! Je vais confirmer le matin et accepter :) – johnwards

+0

Salut les gars, donc c'était une erreur de ma part. L'élément Staff était singulier, les pluriels sont "Content" dans le template de la liste des staffs, il y avait une correspondance sur "Content", c'est à dire que j'ai mis le test et ça marche. Je n'avais pas besoin de faire la fonction text() avec laquelle ça fonctionnait. – johnwards