Получение подстроки атрибута в 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)
Ответ 1 Использование substring(/foo/bar/@baz, string-length(/foo/bar/@baz)-3) Обратите внимание на 3 в выражении. Неправильно следующее: substring(/foo/bar/@baz, string-length(/foo/bar/@baz)-4) потому что это возвращает последние 5 символов строкового значения атрибута baz.
Ответ 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)