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

Получение подстроки атрибута в XPATH

Учитывая

<foo>
  <bar baz="Hello, World!">
</foo>

Как мне все, кроме последних 4 символов @baz? Одна из моих попыток:

/foo/bar/@baz[substring( ., 0, -4 )]
4b9b3361

Ответ 1

Использование

substring(/foo/bar/@baz, string-length(/foo/bar/@baz)-3) 

Обратите внимание на 3 в выражении.

Неправильно следующее:

substring(/foo/bar/@baz, string-length(/foo/bar/@baz)-4) 

потому что это возвращает последние 5 символов строкового значения атрибута baz.

Ответ 2

попробуйте следующее: substring-before(/foo/bar/@baz,"rld!")

Ответ 3

Это на самом деле не так уж плохо, но подстрока IIRC не любит отрицательные индексы. Я попробовал

substring(/foo/bar/@baz, string-length(/foo/bar/@baz)-4)

Который дал мне ожидаемый результат.

Ответ 4

Некоторые ответы возвращают полную противоположность тому, что спрашивал ОП: вопрос был "все, НО последние 4 символа".

Решение ecciethetechie было правильным, с учетом этого конкретного примера. Более общий:

substring(/foo/bar/@baz, 1, string-length(/foo/bar/@baz)-3)