Подтвердить что ты не робот

Проблема с получением функции xpath заканчивается-with() для работы while contains() работает нормально

Я пытаюсь получить теги, у которых есть атрибут, который заканчивается определенным идентификатором.
как <span id="ctl00_ContentPlaceHolder1_Country">
Я хочу получить промежутки, у которых есть id с "Страна"
Я попробую следующий xpath //span[ends-with(@id,'Country')], но я получаю следующее исключение: "Требуется менеджер пространств имен или XsltContext. Этот запрос имеет префикс, переменную или пользовательскую функцию".

странная вещь, которая содержит работы отлично поэтому работает следующий xpath //span[contains(@id,'Country')]
любые идеи, почему это происходит? спасибо

4b9b3361

Ответ 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