Somme chaîne de longueur de deux noeuds différents avec XPath - Somme deux noeuds chaîne de longueur
-
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!
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]