Сумма строковой длины двух разных узлов с xPath-суммируйте два узла строковые длины

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

  •  27-10-2019
  •  | 
  •  

Вопрос

Привет, ребята Следующая XPath, похоже, не работает.

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

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

XML фрагмент

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Другие советы

Если количество имен может варьироваться (например, средний инициатор, OreFix, суффикс и т. Д.), Как правило, невозможно получить разыскивающую сумму с одним выражением XPath 1.0.

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

//FullName[sum(*/stringlength()) ge 30]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top