Сумма строковой длины двух разных узлов с xPath-суммируйте два узла строковые длины
-
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]