XSLT — поиск последнего элемента в группе

#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 элемент последним в своей группе; поэтому жесткое кодирование номера группы — это не выход.