Sum String-Length of two different nodes with Xpath - Sum two nodes string-length

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

  •  27-10-2019
  •  | 
  •  

سؤال

Hi guys The following xpath does not seem to work.

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

Error: Expression must evaluate to a node-set.

XML snippet

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

I know the sum function adds number together, and string length returns numbers.

The following Expression works fine:

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

Any help would be appreciated, thanks!

هل كانت مفيدة؟

المحلول

The sum() function expects a node-set, which you try to provide with your string-length() calls, but that fails. sum() does not appear to be the appropriate function here.

You can either just add up the lengths directly in the predicate:

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

Or you can use concatenate first, then get the length:

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

Or, if your snippet is representative for all FullName elements, just consider the length of all text node contents of the context node like this:

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

نصائح أخرى

If the number of names can vary (such as Middle Initil, orefix, suffix, etc...), it is generally not possible to get the wanted sum with a single XPath 1.0 expression.

In XPath 2.0 this is possible:

//FullName[sum(*/stringlength()) ge 30]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top