powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Запутался в шаблоне, nested <xsl:for-each>
4 сообщений из 4, страница 1 из 1
Запутался в шаблоне, nested <xsl:for-each>
    #38437507
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть XML документ, который описывает остатки товаров в магазинах
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
  <?xml version="1.0" ?>
  <ROOT>
    <SHOP>    
      <NAME>Магазин №1</NAME>
      <GOODS>
        <ROWSET>
          <ROW>
            <GOOD_NAME>Апельсины</GOOD_NAME>
            <GOOD_COUNT>5</GOOD_COUNT>
          </ROW>
          <ROW>
            <GOOD_NAME>Яблоки</GOOD_NAME>
            <GOOD_COUNT>10</GOOD_COUNT>
          </ROW>
        </ROWSET>
      </GOODS>  
    </SHOP>
    <SHOP>    
      <NAME>Магазин №2</NAME>
      <GOODS>
        <ROWSET>
          <ROW>
            <GOOD_NAME>Арбузы</GOOD_NAME>
            <GOOD_COUNT>8</GOOD_COUNT>
          </ROW>
          <ROW>
            <GOOD_NAME>Яблоки</GOOD_NAME>
            <GOOD_COUNT>4</GOOD_COUNT>
          </ROW>
        </ROWSET>
      </GOODS>  
    </SHOP>
  </ROOT>



Мне надо получить следующую таблицу:
ПродуктыМагазин №1Магазин №2Апельсины5Арбузы8Яблоки104

То есть, каждый продукт упоминается один раз, и напротив количество в каждом магазине.

Я накатал вот такой шаблон:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<?xml version="1.0" ?>
  <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:template match="*">
    <HTML>
    <TABLE  BORDER="2" cellspacing="0" cellpadding="0">
     <TR>
       <TH bgcolor="#fd9744">Продукты</TH>
       <xsl:for-each select="//SHOP">
         <TH bgcolor="#fd9744"><xsl:value-of select="NAME"/></TH>
       </xsl:for-each>
     </TR>
     <xsl:for-each select="//GOOD_NAME[not(.=preceding::*)]">
       <xsl:sort select="."/>
       <TR>
       <TD><xsl:value-of select="."/></TD>
       <xsl:for-each select="//SHOP">
         <TD> ??? ТУТ ДОЛЖНО БЫТЬ ЧТО ??? </TD>
       </xsl:for-each>
       </TR>
     </xsl:for-each>
    </TABLE>
    </HTML>
  </xsl:template>
  </xsl:stylesheet>



Табличку он рисует правильного размера.
Но не пойму, как в ячейки для каждого магазина вытащить количество продукта именно в этом магазине ....
По идее нужен снова цикл по магазинам, потом смотреть, есть ли в магазине продукт из текущей строки и если есть, выводить его количество. Но как это воплотить в шаблоне - что-то не догоняю.

Не подскажет ли кто идею?


--------------------------------------------------------------
Запомните, товарищи офицеры, чтобы ничего не делать, надо уметь делать все.
...
Рейтинг: 0 / 0
Запутался в шаблоне, nested <xsl:for-each>
    #38437522
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
<xsl:for-each select="//GOOD_NAME[not(.=preceding::*)]">
    <xsl:var name="g" select="text()"/>
...
<TD><xsl:value-of select="sum(GOODS/ROWSET/*[GOOD_NAME=$g]/GOOD_COUNT)"/></TD>
...
Рейтинг: 0 / 0
Запутался в шаблоне, nested <xsl:for-each>
    #38437538
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, действительно.
Просуммировать продукты с заданным названием в пределах текущего магазина я как-то не догадался :)

Спасибо, работает.


P.S: Хотя уже двигался в ту сторону, пытаясь городить что-то невообразимое (мой вариант не пашет):

Код: xml
1.
<xsl:value-of select="//SHOP[NAME/text()=./NAME]/GOODS/ROWSET/ROW[GOOD_NAME/text()=$g]/GOOD_COUNT"/>
...
Рейтинг: 0 / 0
Запутался в шаблоне, nested <xsl:for-each>
    #38522314
Vova_1805
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таблица у меня не создаётся.
первый файл я сохранил в файле "SHOP.XML"
второй текст сохранил в файле "shops_call .XML"
в последнем файле " shops_call .XML" как вызвать файл "SHOP.XML" ?
Это хотя бы только для того, чтобы вывести табличку,
которую Вы это реализовали. А как?
Спасибо.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Запутался в шаблоне, nested <xsl:for-each>
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]