Sum-longitud de cadena de dos nodos diferentes con XPath-Sum Dos nodos Lengencia de cadena

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

  •  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!

¿Fue útil?

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]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top