Руслан Савенок
530 сообщений
#15 лет назад
Есть вот такой кусок xml

	<group id="594" parent="0">
<name>Двери</name>
<description></description>
<image width="183" height="88">/upload/shop_1/5/9/4/group_594/shop_group_image594.gif</image>
<small_image width="183" height="88">/upload/shop_1/5/9/4/group_594/small_shop_group_image594.gif</small_image>
<order>0</order>
<indexation>1</indexation>
<path>group_594</path>
<fullpath>group_594/</fullpath>
<count_items>0</count_items>
<count_groups>1</count_groups>
<count_all_items>0</count_all_items>
<count_all_groups>1</count_all_groups>
<seo_title></seo_title>
<seo_description></seo_description>
<seo_keywords></seo_keywords>
<propertys>
</propertys>
<group id="621" parent="594">
<name>Железные двери</name>
<description></description>
<order>0</order>
<indexation>1</indexation>
<path>group_621</path>
<fullpath>group_594/group_621/</fullpath>
<count_items>0</count_items>
<count_groups>0</count_groups>
<count_all_items>0</count_all_items>
<count_all_groups>0</count_all_groups>
<seo_title></seo_title>
<seo_description></seo_description>
<seo_keywords></seo_keywords>
<propertys>
</propertys>
</group>
</group>


При его разборе через xslt нужно выбрать активную группу (это сделал стравниванием перемнной current_group_id с id группы), а теперь к этому делу нужно выбрать все родитель этой активной группы. По идее параметр ancestor:: — (Возвращает множество предков.) должен как раз это сделать но, нет он выбирает абсолютно все группы почему то
Сергеевич А.
791 сообщение
#15 лет назад
//group/ancestor::group

выберутся только родители группы 621
Руслан Савенок
530 сообщений
#15 лет назад
Цитата ("h4mpy"):
//group/ancestor::group

В теории да, на практике же выделяются все группы

Вот так написал, но мне не нравится что операция будет выполнятся для каждого эллемента подгруппы

//group/@parent = @id or /shop/@current_group_id = @id


Вот шаблон обработки

	<xsl:template match="group">
<xsl:variable name="current_group_id" select="/shop/@current_group_id" />
<li>
<a href="{/shop/path}{fullpath}">
<xsl:if test="//group/@parent = @id or $current_group_id = @id">
<xsl:attribute name="class">current</xsl:attribute>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>

<xsl:if test="group">
<ul>
<xsl:apply-templates select="group"/>
</ul>
</xsl:if>
</li>
</xsl:template>
Сергеевич А.
791 сообщение
#15 лет назад
Так в чем задача? выделить классом current всех родителей текущей группы?
Руслан Савенок
530 сообщений
#15 лет назад
Цитата ("h4mpy"):
Так в чем задача? выделить классом current всех родителей текущей группы?

Да
Сергеевич А.
791 сообщение
#15 лет назад
Проще искать потомка
<xsl:if test="count(.//group)=1 or $current_group_id = @id">