Очевидно, что MSXML6 не поддерживает XSLT 2.0, по крайней мере, не функцию max()
. Мне нужно узнать узел, который содержит самое высокое значение среди своих братьев и сестер. Они в произвольном порядке.Как получить эквивалент max() на MSXML6?
Я хочу, чтобы заказ оставался идентичным, поэтому добавление order-by
и проверка [0]
невозможен.
Я хочу сделать это с помощью одного заявления XPath. Я не хочу вызывать шаблоны или включать в себя более сложную логику, чем это. Я уверен, что где-то внедрены ужасающие расширители сценариев MS. Eww.
Я подумал:
elem1[count(../elem1[@value < current()/@value]) = 0]
Но это не сработало, как я ожидал (возвращает первый узел всегда). Любая другая отличная магия XPath вы можете придумать там?
Работал как шарм, спасибо! –
Стоит упомянуть, что оператор '>' при подаче набора узлов ('../ elem1/@ value') сравнивает все узлы в наборе с' @ значением'. Это также означает, что выражение на самом деле должно быть «elem1 [not (../ elem1/@ value> @value)] [1]', так как может быть более одного узла с тем же максимальным значением. В этом случае все эти узлы возвращаются, хотя вас интересует только один из них. – Tomalak
Хороший улов, хотя всегда выбирает первый узел, когда выражение XPath возвращает набор узлов. Кажется, оно автоматическое. –