for-each и проход по аттбирутам

MD

Guest
for-each и проход по аттбирутам

из базы собираеться вот такой хмл:
<xml>
<data>
<record family="1" value="aaa" type="xx"/>
<record family="1" value="bbb" type="xx"/>
<record family="1" value="ccc" type="xx"/>
<record family="1" value="ddd" type="yy"/>
<record family="1" value="eee" type="yy"/>
<record family="2" value="fff" type="yy"/>
<record family="2" value="ggg" type="yy"/>
</data>
</xml>

можно ли как-то пройтись по этим записям, но дистинктом?
на пальцах:
1 for-each: берем дистинкт family, т.е. выходит два прохода для семей "1" и "2"
2 for-each (находиться в первом): для актуальной семьи проходит по дистинкт type, т.е. "xx" и "yy"

реально такое сделать?

пс. понятное дело, что из базы можно вернуть несколько клонов <data> с одинаковой структурой и потом уже пользоваться position(), но интересует именно возможность провенуть это выше описанным способом.
 

Sababa

Guest
можно конечно:

составляем ключики:

<xsl:key name="family" match="data/record" use="@family"/>
<xsl:key name="type" match="data/record" use="@type"/>


вложенные foreach

<xsl:foreach select="record[generate-id() = generate-id(key('family', @family))]">

<xsl:foreach select="key('family', @family)[generate-id() = generate-id(key('type', @type))]">

<xsl:foreach select="key('family', @type)">

не проверял, но думаю идея понятна
 
Сверху