Проблема с получением функции xpath заканчивается-with() для работы while contains() работает нормально
Я пытаюсь получить теги, у которых есть атрибут, который заканчивается определенным идентификатором.
как <span id="ctl00_ContentPlaceHolder1_Country">
Я хочу получить промежутки, у которых есть id с "Страна"
Я попробую следующий xpath //span[ends-with(@id,'Country')]
, но я получаю следующее исключение:
"Требуется менеджер пространств имен или XsltContext. Этот запрос имеет префикс, переменную или пользовательскую функцию".
странная вещь, которая содержит работы отлично
поэтому работает следующий xpath //span[contains(@id,'Country')]
любые идеи, почему это происходит?
спасибо
Ответы
Ответ 1
Функция ends-with()
не определена для XPath 1.0 , но только для XPath 2.0 и XQuery.
Вы используете .NET.. NET на этой дате не реализует XPath 2.0, XSLT 2.0 или XQuery.
Можно легко построить выражение XPath 1.0, оценка которого дает тот же результат, что и функция ends-with()
:
$str2 = substring($str1, string-length($str1)- string-length($str2) +1)
создает тот же логический результат (true()
или false()
) как:
ends-with($str1, $str2)
В вашем конкретном случае вам просто нужно подставить правильные выражения для $str1
и $str2
. Они, соответственно, /myXml/data
и 'World'
.
Итак, выражение XPath 1.0, которое эквивалентно выражению XPath 2.0 ends-with(/myXml/data, 'World')
,:
'World' =
substring(/myXml/data,
string-length(/myXml/data) - string-length('World') +1
)
Ответ 2
содержит(), а start-with() - в XSLT1; end-with() только в XSLT2.
Ответ 3
Дата: 6 января 2016 года
Для любого, кто читает этот ответ, это функции Xpath String, поддерживаемые в последней версии .Net 4.6:
concat: возвращает конкатенацию аргументов.
содержит: возвращает true, если первая строка аргумента содержит вторую строку аргумента; иначе возвращает false.
normalize-space: возвращает строку аргумента с выделенным пробелом.
start-with: возвращает true, если строка первого аргумента начинается со второй строки аргумента; иначе возвращает false.
строка. Преобразует объект в строку.
длина строки. Возвращает количество символов в строке.
substring: возвращает подстроку первого аргумента, начиная с позиции, указанной во втором аргументе, и длины, указанной в третьем аргументе.
substring-after: возвращает подстроку первой строки аргумента, которая следует за первым вхождением второй строки аргумента в первой строке аргумента.
substring-before: возвращает подстроку первой строки аргумента, которая предшествует первому вхождению второй строки аргумента в первой строке аргумента.
translate: возвращает первую строку аргумента с вхождениями символов во второй строке аргумента, замененной символом в соответствующей позиции в третьей строке аргумента.
Источник MSDN