2011-10-19 11 views
5

Hola chicos El siguiente xpath no parece funcionar.Sum String-Length de dos nodos diferentes con Xpath - Suma dos nodos string-length

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

Error: Expresión debe evaluarse como un conjunto de nodos.

fragmento de XML

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

Sé que la función de suma añade varios de ellos y los números y devuelve la longitud de cuerda.

la siguiente expresión funciona bien:

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

Cualquier ayuda se agradece, gracias!

Respuesta

4

La función sum()expects a node-set, que intenta proporcionar con sus llamadas string-length(), pero eso falla. sum() no parece ser la función apropiada aquí.

Puedes simplemente sumar las longitudes directamente en el predicado:

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

O puede utilizar concatenar en primer lugar, a continuación, obtener la longitud:

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

O, si el fragmento es representativa para todos los elementos FullName, solo tenga en cuenta la longitud de todos los contenidos del nodo de texto del nodo de contexto como este:

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

La última sugerencia sólo funciona si la hoja de estilo especifica '', de lo contrario la longitud también incluirá el espacio en blanco. –

+0

¡Gracias por la información! Lo aprecio – james31rock

2

Si el número de nombres puede variar (como Middle Initil, orefix, sufijo, etc.), generalmente no es posible obtener la suma deseada con una sola expresión XPath 1.0.

En XPath 2.0 esto es posible:

//FullName[sum(*/stringlength()) ge 30] 
Cuestiones relacionadas