Получение подстроки атрибута в XPATH
Учитывая
<foo>
<bar baz="Hello, World!">
</foo>
Как мне все, кроме последних 4 символов @baz? Одна из моих попыток:
/foo/bar/@baz[substring( ., 0, -4 )]
Ответы
Ответ 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)