На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL
  
> Группировка 2х уровней данных в XSL , как?
    Файл test.xml:
    ExpandedWrap disabled
      <?xml version="1.0" encoding="windows-1251"?>
      <?xml-stylesheet type="text/xsl" href="test.xsl"?>
      <!DOCTYPE base SYSTEM "test.dtd">
       
      <base>
          <object>
              <attr>
                  <name>&house_matherial;</name>
                  <value>&house_matherial_1;</value>
              </attr>
              <attr>
                  <name>&roof_matherial;</name>
                  <value>&roof_matherial_2;</value>
              </attr>
          </object>
          <object>
              <attr>
                  <name>&house_matherial;</name>
                  <value>&house_matherial_3;</value>
              </attr>
              <attr>
                  <name>&roof_matherial;</name>
                  <value>&roof_matherial_2;</value>
              </attr>
          </object>
          <object>
              <attr>
                  <name>&house_matherial;</name>
                  <value>&house_matherial_3;</value>
              </attr>
              <attr>
                  <name>&roof_matherial;</name>
                  <value>&roof_matherial_2;</value>
              </attr>
          </object>
          <object>
              <attr>
                  <name>&house_matherial;</name>
                  <value>&house_matherial_2;</value>
              </attr>
              <attr>
                  <name>&roof_matherial;</name>
                  <value>&roof_matherial_1;</value>
              </attr>
          </object>
      </base>

    Файл test.xsl:
    ExpandedWrap disabled
      <?xml version="1.0" encoding="windows-1251"?>
      <xsl:stylesheet version="1.0"
          xmlns="http://www.w3.org/TR/REC-html40"
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       
      <xsl:template match="/">
          <HTML>
              <HEAD>
                  <TITLE></TITLE>
              </HEAD>
              <BODY>
                  <DIV class="page">
                      <xsl:apply-templates/>
                  </DIV>
              </BODY>
          </HTML>
      </xsl:template>
       
          <xsl:key name="name_key" match="attr" use="name|value"/>
       
          <xsl:template match="object">
              <xsl:for-each select="attr[count(. | key('name_key', name)[1])=1]">
                  <xsl:sort select="name"/>
                  <li>
                      <h3><xsl:value-of select="name"/></h3>
                      <ul><!--вот здесь проблемка-->
                          <xsl:for-each select="key('name_key', name)|attr[value]">
                              <xsl:sort select="value"/>
                              <li>
                                  <xsl:value-of select="value"/>
                              </li>
                          </xsl:for-each>
                      </ul>
                  </li>
              </xsl:for-each>
          </xsl:template>
       
      </xsl:stylesheet>

    DTD приводить не буду, не важно.

    name - назначение материала.
    value - вид материала.

    ExpandedWrap disabled
      &house_matherial; - материал дома
      &roof_matherial; - материал крыши


    Надо составить XSL так, чтобы на выходе получать:

    ExpandedWrap disabled
      Назначение материала #1: <список всех используемых
      в БД видов материалов для данного
      назначения и в скобках количество объектов,
      испоьзующих данный материал для данного назначения>
      Назначение материала #2: <список всех используемых
      в БД видов материалов для данного
      назначения и в скобках количество объектов,
      испоьзующих данный материал для данного назначения>


    Например:
    ExpandedWrap disabled
      Материал дома: кирпич(1), саман(2), шлакоблок(1)
      Материал крыши: шифер(1), черепица(2)


    Т.е. я пока имею группировку только по виду назначения материала, а хочется ещё сгруппировать и виды материалов.
      Я в XSL не силен, потому для данного конкретного примера не скажу. Но... виды материалов, которые сгруппированы по назначению, ты что, опять по назначению разгруппировывать хочешь? Экая загогулина получается...
        Объясню.

        Структура вида:
        ExpandedWrap disabled
          o(
              B=>Ba,
              A=>Aa,
              C=>Ca
          ),
          o(
              B=>Bb,
              A=>Aa
          )

        Надо получить на выходе:
        ExpandedWrap disabled
          B(2): Bb(1), Ba(1);
          A(2): Aa(2);
          C(1): Ca(1)
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0310 ]   [ 15 queries used ]   [ Generated: 27.04.24, 12:25 GMT ]