Сумма длины строки двух разных узлов с Xpath - сумма длины строки двух узлов - PullRequest
5 голосов
/ 20 октября 2011

Привет, ребята. Следующий xpath не работает.

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

Ошибка: выражение должно соответствовать набору узлов.

Фрагмент XML

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

Я знаю, что функция суммы складывает число вместе, а длина строки возвращает числа.

Следующее выражение отлично работает:

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

Любая помощь будет оценена, спасибо!

Ответы [ 2 ]

4 голосов
/ 20 октября 2011

Функция sum() ожидает набор узлов , который вы пытаетесь предоставить с помощью вызовов string-length(), но это не удается. sum() здесь не является подходящей функцией.

Вы можете просто сложить длины непосредственно в предикате:

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

Или вы можете сначала использовать сцепление, а затем получить длину:

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

Или, если ваш фрагмент является репрезентативным для всех элементов FullName, просто рассмотрите длину всего содержимого текстового узла узла контекста следующим образом:

//FullName[string-length() >= 30] 
2 голосов
/ 20 октября 2011

Если количество имен может варьироваться (например, Middle Initil, orefix, суффикс и т. Д.), Обычно невозможно получить требуемую сумму с помощью одного выражения XPath 1.0.

В XPath 2.0 это возможно :

//FullName[sum(*/stringlength()) ge 30]
...