#xml #xslt
#xml #xslt
Вопрос:
Я перебираю группу элементов, и пока я выполняю итерацию, мне нужно получить доступ к информации из последнего набора узлов.
Например, у меня есть тест, который возвращается к элементам level1, в то время как я получаю значения для текущего набора узлов, чтобы проверить и посмотреть, есть ли несколько элементов, содержащих один и тот же номер группы, а затем, если это так, потребуется получить доступ к информации из последнего набора узлов, который содержитгруппа с номером 3.
<root>
<level1>
<group>1</group>
<name>test1</name>
<email>test@email.com</email>
</level1>
<level1>
<group>3</group>
<name>test2</name>
<email>test2@email.com</email>
</level1>
<level1>
<group>3</group>
<name>test3</name>
<email>test3@email.com</email>
<manager>manager@email.com</email>
</level1>
</root>
Я попробовал следующее, чтобы вернуться на корневой уровень, чтобы проверить, существует ли группа, и получить последний набор узлов, содержащий определенную группу.
../../level1/group = ./group
./group = ../../level1/group
./group = ../../level1/group[1][last()]
Комментарии:
1. Неясно, где вы находитесь во время итерации, что именно вам нужно знать и — самое главное — почему. Как только вы это проясните, я подозреваю, что ответ будет сильно отличаться от того, что вы ожидаете. Скорее всего, окажется, что это вопрос о группировке. — Также, пожалуйста, укажите, используете ли вы XSLT 1.0 или 2.0.
Ответ №1:
Если вы просто хотите найти последний тег для группы 3, вы можете сделать следующее:
root/level1[group = 3][position() = last()]
Комментарии:
1.
root/level1[group = 3 and position() = last()]
не выбирает «последний тег для группы 3«. Он выбирает последний из ВСЕХlevel1
элементов, если номер его группы равен 3. В противном случае он ничего не выбирает.2. Я подозреваю, что OP хочет знать, является ли текущий
level1
элемент последним в своей группе; поэтому жесткое кодирование номера группы — это не выход.