Sum-longitud de cadena de dos nodos diferentes con XPath-Sum Dos nodos Lengencia de cadena
-
27-10-2019 - |
Pregunta
Hola chicos, el siguiente XPath no parece funcionar.
//FullName[sum(string-length(FirstName) | string-length(LastName))>= 30]
Error: la expresión debe evaluar en un conjunto de nodo.
Fragmento XML
<FullName>
<FirstName>somereallylongfirstnameguy</FirstName>
<LastName>somereallylonglasttnameguyabcdefghijklmnopqrstuv</LastName>
</FullName>
Sé que la función de suma agrega número y la longitud de la cadena devuelve los números.
La siguiente expresión funciona bien:
//FullName[string-length(FirstName) >= 1]
¡Cualquier ayuda será apreciada, gracias!
Solución
los sum()
función espera un set de nodo, que intentas proporcionar con tu string-length()
Llamadas, pero eso falla. sum()
no parece ser la función apropiada aquí.
Puede simplemente sumar las longitudes directamente en el predicado:
//FullName[string-length(FirstName)+string-length(LastName) >= 30]
O puede usar Concatenate primero, luego obtener la longitud:
//FullName[string-length(concat(FirstName,LastName)) >= 30]
O, si su fragmento es representativo para todos FullName
elementos, solo considere la longitud de todos los contenidos del nodo de texto del nodo de contexto como este:
//FullName[string-length() >= 30]
Otros consejos
Si el número de nombres puede variar (como INITIL MEDIAL, OREFIX, SUFFIX, etc.), generalmente no es posible obtener la suma deseada con una sola expresión de XPath 1.0.
En xpath 2.0 esto es posible:
//FullName[sum(*/stringlength()) ge 30]