Somme chaîne de longueur de deux noeuds différents avec XPath - Somme deux noeuds chaîne de longueur

StackOverflow https://stackoverflow.com/questions/7828091

  •  27-10-2019
  •  | 
  •  

Question

Salut les gars La XPath suivante ne semble pas fonctionner.

//FullName[sum(string-length(FirstName) | string-length(LastName))>= 30]

Erreur:. L'expression doit évaluer un ensemble de nœuds

XML extrait

<FullName>
 <FirstName>somereallylongfirstnameguy</FirstName>
 <LastName>somereallylonglasttnameguyabcdefghijklmnopqrstuv</LastName>
</FullName>

Je sais que la fonction SOMME additionne nombre ensemble, et le nombre de retours de longueur de chaîne.

L'expression suivante fonctionne très bien:

//FullName[string-length(FirstName) >= 1]

Toute aide serait appréciée, merci!

Était-ce utile?

La solution

La fonction sum() attend nœuds, que vous essayez de fournir avec vos appels string-length(), mais échoue. sum() ne semble pas être ici la fonction appropriée.

Vous pouvez soit juste ajouter les longueurs directement dans le prédicat:

//FullName[string-length(FirstName)+string-length(LastName) >= 30] 

Vous pouvez aussi utiliser concaténer d'abord, puis obtenir la longueur:

//FullName[string-length(concat(FirstName,LastName)) >= 30] 

Ou, si votre extrait est représentatif de tous les éléments de FullName, juste considérer la longueur de tout le contenu du nœud texte du noeud contextuel comme ceci:

//FullName[string-length() >= 30] 

Autres conseils

Si le nombre de noms peut varier (comme moyen Initil, orefix, suffixe, etc ...), il est généralement pas possible d'obtenir la somme voulu avec une seule expression XPath 1.0.

Dans XPath 2.0 cela est possible :

//FullName[sum(*/stringlength()) ge 30]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top