2010-04-19 7 views
6

Je dois filtrer une expression XPath pour saisir uniquement un certain attribut non vide.Filtre XPath non vide élément enfant

J'ai essayé ceci:

<xsl:template match="DocumentElement/QueryResults[string(@FileName)]"> 

et ceci:

<xsl:template match="DocumentElement/QueryResults[string-length(@FileName)>0]"> 

mais cela n'a pas fonctionné. J'ai besoin du même type de données qui reviennent de l'expression XPath folloing ...

<xsl:template match="DocumentElement/QueryResults"> 

... mais pour éviter filtré des éléments avec @FileName attribut vide.

Merci!

Répondre

8

Étant donné que FileName est un élément enfant et non un attribut, vous devez y accéder en tant que tel et ne pas utiliser le qualificateur d'attribut @ devant le nom de noeud.

Essayez:

<xsl:template match="DocumentElement/QueryResults[FileName]"> 

Cela permet de sélectionner les éléments qui ont DocumentElement/QueryResults un élément enfant FileName.

Si, cependant, vous avez toujours un élément enfant FileName (parfois vide) et que vous voulez sélectionner les non vides, essayez ceci:

<xsl:template match="DocumentElement/QueryResults[string-length(FileName) &gt; 0]"> 
+0

Os, désolé, je viens de trouver "FileName" isn't et attribut, mais en fait un nœud. Comment puis-je vérifier qu'il n'est pas vide? Merci. –

+0

@Marcos - Cela expliquerait les problèmes que vous avez eu ... Réponse mise à jour (il suffit de supprimer l'attribut qualificateur @). – Oded

+0

Merci, je ne suis pas un spécialiste XPATH et j'avais des problèmes avec le comportement étrange du logiciel que j'utilise et de l'analyseur. Comme les données source étaient extraites d'une requête SQL, je lui ai appliqué une clause WHERE au lieu d'utiliser un filtre dans l'expression XPATH. Je vous remercie. –

3
<xsl:template match="DocumentElement/QueryResults[FileName != '']"> 

C'est juste une supposition rapide, et je n'ont pas travaillé avec XPath/XSLT depuis longtemps. Pourtant, si c'est vide, alors ça devrait sauter dessus. Bien que je préfère utiliser les fonctions comme string-length, tous les UA ne les supportent pas (notamment les parseurs XSLT côté client qui fonctionnent à peine avec XPath et XSLT 1.0, sans se soucier des fonctions et fonctionnalités utiles que fournissent XSLT 2.0 et XPath).

+0

Merci, je ne suis pas non plus un spécialiste XPATH et j'avais des problèmes avec le comportement étrange du logiciel que j'utilise et de l'analyseur. Comme les données source étaient extraites d'une requête SQL, je lui ai appliqué le filtre au lieu d'utiliser un filtre dans l'expression XPATH. Merci quand même. –

Questions connexes