Somma stringa di lunghezza di due diversi nodi con XPath - Somma due nodi stringa di lunghezza

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

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

È stato utile?

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]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top