Somma stringa di lunghezza di due diversi nodi con XPath - Somma due nodi stringa di lunghezza
-
27-10-2019 - |
Domanda
Ciao ragazzi Il seguente XPath non sembra al lavoro.
//FullName[sum(string-length(FirstName) | string-length(LastName))>= 30]
Errore:. Espressione deve restituire un set di nodi
XML frammento
<FullName>
<FirstName>somereallylongfirstnameguy</FirstName>
<LastName>somereallylonglasttnameguyabcdefghijklmnopqrstuv</LastName>
</FullName>
So che la funzione somma aggiunge il numero insieme, e restituisce la lunghezza della stringa di numeri.
La seguente espressione funziona bene:
//FullName[string-length(FirstName) >= 1]
Qualsiasi aiuto sarebbe apprezzato, grazie!
Soluzione
La funzione sum()
si aspetta una set di nodi, che si tenta di fornire con le chiamate string-length()
, ma questo fallisce. sum()
non sembra essere la funzione appropriata qui.
Si può o solo sommare le lunghezze direttamente nel predicato:
//FullName[string-length(FirstName)+string-length(LastName) >= 30]
In alternativa è possibile utilizzare concatenate prima, quindi ottenere la lunghezza:
//FullName[string-length(concat(FirstName,LastName)) >= 30]
In alternativa, se il frammento è rappresentativo per tutti gli elementi FullName
, basti pensare la lunghezza di tutti i contenuti dei nodi di testo del nodo di contesto come questo:
//FullName[string-length() >= 30]
Altri suggerimenti
Se il numero dei nomi può variare (come il Medio Initil, orefix, suffisso, ecc ...), generalmente non è possibile ottenere la somma voluto con un solo XPath 1.0 espressione.
In XPath 2.0 questo è possibile :
//FullName[sum(*/stringlength()) ge 30]