Одна большая вещь о модульных тестах состоит в том, что они служат документацией для того, как Ваш код предназначен для поведения. Хорошие тесты отчасти похожи на ссылочную реализацию, и товарищи по команде могут посмотреть на них, чтобы видеть, как интегрировать их код с Вашим.
Оказалось, что инструмент не поддерживает XPath 2.0.
XPath 1.0 не имеет причудливых min ()
и max ()
функции, поэтому, чтобы найти эти значения, нам нужно немного повозиться с логикой XPath и сравнить значения на братьях и сестрах узла:
Максимум:
/foo/bar[not(preceding-sibling::bar/@score >= @score)
and not(following-sibling::bar/@score > @score)]/@score
Минимум:
/foo/bar[not(preceding-sibling::bar/@score <= @score)
and not(following-sibling::bar/@score < @score)]/@score
При встраивании этих запросов в файлы XML как XSLT или скрипты муравьев, не забудьте кодировать <
и >
как & lt;
с учетом & gt;
.
Вот несколько более короткое решение.
Максимум:
/foo/bar/@score[not(. < ../../bar/@score)][1]
Минимум:
/foo/bar/@score[not(. > ../../bar/@score)][1]
Я отредактировал предикат так, чтобы он был применим к любой последовательности бара
, даже если вы решите изменить путь. Обратите внимание, что родительский элемент атрибута - это элемент, которому он принадлежит.
При встраивании этих запросов в файлы XML, такие как XSLT или сценарии ant, не забудьте кодировать <
и >
как ] & lt;
с учетом & gt;
.
Попробуйте следующее:
//foo/bar[not(preceding-sibling::bar/@score <= @score) and not(following-sibling::bar/@score <= @score)]
Возможно, это сработает в XPath 1.0.