Отображение всех элементов ИС в XSL шаблоне (для табов)

#
Отображение всех элементов ИС в XSL шаблоне (для табов)
Здравствуйте!

Помогите, пожалуйста, разобраться с задачей. Нужно сделать табы для Информационной системы. В XML выводятся все группы, подгруппы и элементы ИС. А вот в XSL не могу отобразить так, как необходимо. Логика нужна следующая, классическая:


<ul class="tab">
  <li><a href="#" class="tablinks" onclick="openSubgroupID(event, '10')">Информационная группа 1</a></li>
  <li><a href="#" class="tablinks" onclick="openSubgroupID(event, '20')">Информационная группа 2</a></li>
  <li><a href="#" class="tablinks" onclick="openSubgroupID(event, '30')">Информационная группа 3</a></li>
</ul>

<div id="10" class="tabcontent">
  <h3>Информационная подгруппа 1</h3>
   <a href="#">Информационный элемент 1</a>
   <a href="#">Информационный элемент 2</a>
   <a href="#">Информационный элемент 3</a>
</div>

<div id="20" class="tabcontent">
  <h3>Информационная подгруппа 2</h3>
   <a href="#">Информационный элемент 1</a>
   <a href="#">Информационный элемент 2</a>
   <a href="#">Информационный элемент 3</a>
</div>

<div id="30" class="tabcontent">
  <h3>Информационная подгруппа 3</h3>
   <a href="#">Информационный элемент 1</a>
   <a href="#">Информационный элемент 2</a>
   <a href="#">Информационный элемент 3</a>
</div>


Буду признателен за помощь и за полезное решение.
#
Re: Отображение всех элементов ИС в XSL шаблоне (для табов)
Табы:

<ul class="tab">
  <xsl:for-each select="informationsystem_group">
...
  </xsl:for-each>
</ul>

Их содержимое:

<xsl:for-each select="informationsystem_group">
  <xsl:variable name="groupId" select="@id"/>
  <div id="@id" class="tabcontent">
    <h3>Информационная подгруппа <xsl:value-of select="@id"/></h3>
    <xsl:for-each select="informationsystem_item[informationsystem_group_id = @groupId]">
      ..
    </xsl:for-each>
  </div>
</xsl:for-each>
ARTatom
#
Re: Отображение всех элементов ИС в XSL шаблоне (для табов)
вот так правильней будет

<xsl:for-each select="informationsystem_group">
   <xsl:variable name="groupId" select="@id"/>
   <div id="@id" class="tabcontent">
     <h3>Информационная подгруппа <xsl:value-of select="@id"/></h3>
     <xsl:for-each select="//informationsystem_item[informationsystem_group_id = @groupId]">
       ..
     </xsl:for-each>
   </div>
</xsl:for-each>
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Отображение всех элементов ИС в XSL шаблоне (для табов)
Спасибо, что поправили - забыл xPath к ИЭ - но надо еще немного "пищи" для ума оставлять вопрошающему, так сказать для "роста"
ARTatom
#
Re: Отображение всех элементов ИС в XSL шаблоне (для табов)
EugenyP писал(а):
вот так правильней будет
artatom писал(а):
Спасибо, что поправили - забыл xPath к ИЭ - но надо еще немного "пищи" для ума оставлять вопрошающему, так сказать для "роста"


Спасибо Вам огромное! Табы и подгруппы выводятся. Но есть одна проблема - не выводятся именно элементы ИС. Может быть потому что у меня другая иерархия в XML и у informationsystem_group нет потомков...

Вот иерархия моего XML:
#
Re: Отображение всех элементов ИС в XSL шаблоне (для табов)
Сделал. Вот полный XSL шаблон для этого решения.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:hostcms="http://www.hostcms.ru/"
            exclude-result-prefixes="hostcms">

   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>

   <!-- СписокЭлементовИнфосистемы -->

   <xsl:template match="/">
      <main role="main">
         <xsl:apply-templates select="/informationsystem"/>
      </main>
   </xsl:template>

   <xsl:template match="/informationsystem">

      <h1><xsl:value-of disable-output-escaping="yes" select="name"/></h1>

      <ul class="tab">
         <xsl:for-each select="informationsystem_group">
            <li><a href="#" class="tablinks" onclick="openCity(event, '{@id}');return false;"><xsl:value-of disable-output-escaping="yes" select="name"/></a></li>
         </xsl:for-each>
      </ul>

      <!-- Отображение подгрупп данной группы, только если подгруппы есть и не идет фильтра по меткам -->
      <div class="tab-block">
         <xsl:apply-templates select="informationsystem_group"/>
      </div>
   </xsl:template>

   <xsl:template match="informationsystem_group">
      <div id="{@id}" class="tabcontent">
         <xsl:for-each select="informationsystem_group">
            <div class="chapter">
               <h2><xsl:value-of disable-output-escaping="yes" select="name"/></h2>
               <xsl:variable name="group_id" select="@id" />
               <xsl:apply-templates select="/informationsystem//informationsystem_item[informationsystem_group_id = $group_id]"/>
            </div>
         </xsl:for-each>
      </div>
   </xsl:template>

   <!-- Шаблон вывода информационного элемента -->
   <xsl:template match="informationsystem_item">
      <a href="{url}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
   </xsl:template>
   
</xsl:stylesheet>
Авторизация