Вывод уникальных значений (xslt) — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 5 промежуточных версий 3 участников)
Строка 1: Строка 1:
 
  [[category:Верстка в XSLT]]
 
  [[category:Верстка в XSLT]]
 +
'''Актуально для версии 2.9'''
  
 
Имеем несколько узлов, у которых повторяются значения атрибута (например, '''id''').<br/>
 
Имеем несколько узлов, у которых повторяются значения атрибута (например, '''id''').<br/>
Задача: Вернуть только уникальные '''id'''.
 
  
 +
== Задача ==
 +
Вернуть только уникальные '''id'''.
 +
 +
 +
== Решение ==
 
Имеем следующие данные в формате xml:
 
Имеем следующие данные в формате xml:
 
<source lang="xml">
 
<source lang="xml">

Текущая версия на 14:58, 31 октября 2019

Актуально для версии 2.9

Имеем несколько узлов, у которых повторяются значения атрибута (например, id).

Задача

Вернуть только уникальные id.


Решение

Имеем следующие данные в формате xml:

<items>
    <item id="1"></item>
    <item id="2"></item>
    <item id="6"></item>
    <item id="4"></item>
    <item id="5"></item>
    <item id="2"></item>
    <item id="3"></item>
    <item id="6"></item>
</items>

Далее, представлен вариант решения поставленной задачи.

<xsl:key name="key_id" match="item" use="@id"/>

<xsl:template match="items">
<html>
<body> 
    <xsl:apply-templates select="item"/>
</body>
</html>
</xsl:template>

<xsl:template match="item">
    <xsl:if test="generate-id(.)=generate-id(key('key_id',@id))">
        <xsl:value-of select="@id"/><br/>
    </xsl:if>
</xsl:template>

В результате обработки получаем следующее:

1
2
6
4
5
3