Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XSLT. Отчёт a'la Crosstab, Проблема с отчётом 
V
    Опции темы
Veivan
Дата 28.1.2010, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Подскажите плиз способ обработки.
Требуется выдать содержимое XML в HTML с помощью XSLT.
Кажется, это называется кросстаб. Список надо развернуть в одну строку, сгруппировав по ID.
Надо подвести итоги по каждому тэгу Block и вцелом по Report, просуммировав данные из Resurs . 
Каждый Resurs имеет уникальный res_id.
Хочется итоги видеть примерно так:
Resurs1 | Resurs 2 |... |Resurs N
Block1 S_money1 | S_money2 |...|S_moneyN
Block2 S_money1 | S_money2 |...|S_moneyN

Report S_money1 | S_money2 |...|S_moneyN

XSLT изучаю недавно. Пытался использовать key, но что-то не выходит :-(

Код

<?xml version="1.0" encoding="windows-1251"?>
<Report>
<Block Sign="1"> 
    <Act Sign="1а">
        <UseResource>
                    <Resurs OrdNum="1" res_id="1" S_money="0.883" S_Nature="0.555"/>
                    <Resurs OrdNum="3" res_id="2" />
                    <Resurs OrdNum="2" res_id="3" />
                    <Resurs OrdNum="4" res_id="4" />
                    <Resurs OrdNum="7" res_id="6" />
                    <Resurs OrdNum=" " res_id="7" />
                    <Resurs OrdNum=" " res_id="9"  S_money="0.263" S_Nature="0.264"/>
                    <Resurs OrdNum="6" res_id="10" S_money="0.179" S_Nature="1061.913"/>
        </UseResource>
    </Act>
    <Act Sign="1б">
        <UsePr Count="243" v1="160.028" v2="34.263"/>
        <UseResource>
                    <Resurs OrdNum="1" res_id="1" S_money="48.174" S_Nature="30.132"/>
                    <Resurs OrdNum="3" res_id="2" />
                    <Resurs OrdNum="2" res_id="3" />
                    <Resurs OrdNum="4" res_id="4" />
                    <Resurs OrdNum="7" res_id="6" />
                    <Resurs OrdNum=" " res_id="7" />
                    <Resurs OrdNum=" " res_id="9" S_money="13.911" S_Nature="13.851"/>
                    <Resurs OrdNum="6" res_id="10" />
        </UseResource>
    </Act>
</Block> 
        <Block Sign="2" >
            <Act Sign="5 " >
                <UsePr Count="60" v1="11.400" v2="3.180"/>
                <UseResource>
                    <Resurs OrdNum="1" res_id="1" />
                    <Resurs OrdNum="3" res_id="2" />
                    <Resurs OrdNum="2" res_id="3" />
                    <Resurs OrdNum="4" res_id="4" S_money="3.287" S_Nature="0.240"/>
                    <Resurs OrdNum="7" res_id="6" />
                    <Resurs OrdNum=" " res_id="7" />
                    <Resurs OrdNum=" " res_id="9" S_money=".107" S_Nature=".120"/>
                    <Resurs OrdNum="6" res_id="10" />
                </UseResource>
            </Act>
            <Act Sign="6 " >
                <UsePr Count="260" v1="77.324" v2="22.360"/>
                <UseResource>
                    <Resurs OrdNum="1" res_id="1" />
                    <Resurs OrdNum="3" res_id="2" S_money="25.267" S_Nature="1.965"/>
                    <Resurs OrdNum="2" res_id="3" />
                    <Resurs OrdNum="4" res_id="4" />
                    <Resurs OrdNum="7" res_id="6" />
                    <Resurs OrdNum=" " res_id="7" />
                    <Resurs OrdNum=" " res_id="9" S_money="2.907" S_Nature="0.865"/>
                    <Resurs OrdNum="6" res_id="10" />
                </UseResource>
            </Act>
</Block> 
</Report> 


PM MAIL   Вверх
diadiavova
Дата 29.1.2010, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



А можно увидеть документ, который получить надо из этого? Я, например, описания "на пальцах" не понял.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Veivan
Дата 29.1.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Приложил желаемый результат. 
Это HTML. Я изменил расширение, потому что сайт ругнулся.
В HTM приведены не все строчки, поэтому итоги не совпадают,
но суть кажется ясна.

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  Report.txt 10,39 Kb
PM MAIL   Вверх
diadiavova
Дата 29.1.2010, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Честно говоря: всё равно не понял что откуда берётся и куда девается. 
Тогда давай начнём с конца smile А что у тебя уже сделано и что непонятно, тут работа серьёзная, поэтому всё-равно либо самому придётся бОльшую её часть делать, либо на фриланс-биржу. Но даже в последнем случае задание надо сформулировать более понятно. То есть надо объяснить каким образом из данных исходного документа получаются данные результата.

А хтмл-код можно так же как и хмл прямо в топик вписывать, там много типов подсветки, для хтмл тоже есть.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Veivan
Дата 30.1.2010, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Попробую сформулировать по-другому.
Есть XML:
Код

<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="Report.xsl"?>
<Колхоз>
    <Стадо name="1">
        <Пастух name="Иванов">
            <Resurs name="овцы"    res_id="1" count="5" />
            <Resurs name="козы"    res_id="2" count="10" />
            <Resurs name="коровы"    res_id="3" count="7"/>
        </Пастух>
        <Пастух name="Петров">
            <Resurs name="овцы"    res_id="1" count="11" />
            <Resurs name="козы"    res_id="2" count="2" />
            <Resurs name="коровы"    res_id="3" count="14"/>
        </Пастух>
    </Стадо>
    <Стадо name="2" >
        <Пастух name="Сидоров">
            <Resurs name="овцы"    res_id="1" count="3" />
            <Resurs name="козы"    res_id="2" count="5" />
            <Resurs name="коровы"    res_id="3" count="2"/>
        </Пастух>
        <Пастух name="Кузнецов">
            <Resurs name="овцы"    res_id="1" count="8" />
            <Resurs name="козы"    res_id="2" count="3" />
            <Resurs name="коровы"    res_id="3" count="4"/>
        </Пастух>
    </Стадо>
</Колхоз>  

Из него надо получить HTML:
Код

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"></head>
<body><h3 class=Title><span lang="ru">Колхоз </span>"<span lang="ru">Вперёд</span>". 
</h3><table class=Base cellspacing=1>
<td width="123" align="center" bgcolor="#C0C0C0">Название</td>
<td align="center" bgcolor="#C0C0C0">овцы</td>
<td align="center" bgcolor="#C0C0C0">козы</td>
<td align="center" bgcolor="#C0C0C0">коровы</td></tr>
<tr class=Block><td align=left nowrap width="123" bgcolor="#008080"> стадо 1 </td>
    <td align=right nowrap bgcolor="#008080"> </td>
    <td align=right nowrap bgcolor="#008080"> </td>
    <td align=right nowrap bgcolor="#008080"> </td></tr>
<tr class=Data><td align=left nowrap width="123">Пастух Иванов </td><td align=right nowrap>
    5</td><td align=right nowrap>10</td><td align=right nowrap>8</td></tr>
<tr class=Data><td align=left nowrap width="123" height="22">Пастух Петров</td>
    <td align=right nowrap height="22">11</td>
    <td align=right nowrap height="22">2</td>
    <td align=right nowrap height="22">14</td></tr>
<tr class=RazdelItog><td align=left nowrap width="123" height="28"><b>итого по стаду 1</b></td>
    <td align=right nowrap height="28"><b>16</b></td>
    <td align=right nowrap height="28"><b>12</b></td>
    <td align=right nowrap height="28"><b>22</b></td></tr>
<tr class=Block><td align=left nowrap width="123" height="27" bgcolor="#008080"> стадо 2</td>
    <td align=right nowrap height="27" bgcolor="#008080"> </td>
    <td align=right nowrap height="27" bgcolor="#008080"> </td>
    <td align=right nowrap height="27" bgcolor="#008080"> </td></tr>
<tr class=Data><td align=left nowrap width="123">Пастух Сидоров</td><td align=right nowrap>
    3</td><td align=right nowrap>5</td><td align=right nowrap>2</td></tr>
<tr class=Data><td align=left nowrap width="123">Пастух Кузнецов</td><td align=right nowrap>
    8</td><td align=right nowrap>3</td><td align=right nowrap>4</td></tr>
<tr class=RazdelItog><td align=left nowrap width="123"><b>итого по стаду 2</b></td><td align=right nowrap>
    <b>11</b></td><td align=right nowrap><b>8</b></td><td align=right nowrap><b>
    6</b></td></tr>
<tr class=MainItog><td align=left nowrap width="123" bgcolor="#FFFF00">Общий 
    итог по колхозу</td><td align=right nowrap bgcolor="#FFFF00">
    27</td><td align=right nowrap bgcolor="#FFFF00">20</td>
    <td align=right nowrap bgcolor="#FFFF00">28</td></tr>
</table></body></html>


Нужно просуммировать животин с разделением по виду, сгруппировав по стаду 
и вцелом по колхозу. Как сформировать HTML - понятно.
Вопрос состоит в следующем: как осуществить суммирование "по стаду" и "по кохозу"?
На SQL c помощью такие вещи делаются с пом GROUP BY.
XSLT вроде предназначен для работы с иерархиями, но я не обнаружил походящего механизма.
Либо чё то не понимаю. 
Работу я собираюсь делать сам, без фриланса.
Хочется освоить XSLT, поэтому буду рад идеям. 
Жалко если не получится на XSLT, тогда придётся оставить на SQL.
PM MAIL   Вверх
diadiavova
Дата 30.1.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(Veivan @  30.1.2010,  01:11 Найти цитируемый пост)
как осуществить суммирование "по стаду" и "по кохозу"?
Суммирование производится при помощи XPath-функции sum. То есть тебе надо написать XPath-выражение, которое будет возвращать нужную тебе группу узлов и передать этой функции.
Код

    <xsl:value-of select="sum(//Стадо[@name = '1']//Resurs[@name = 'овцы']/@count)" />
Вот такое выражение покажет на выходе количество овец в первом стаде. Остальное по тому же принципу.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Veivan
Дата 30.1.2010, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Спасибо за помощь.
Функция Sum это хорошо и правльно. Но как её параметризовать?
Нельзе же в код написать 
Код

...sum(//Стадо[@name = '1']//...

Если понадобится сортировка, то как быть?
Посмотрите плиз XML и XSL
Код

<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="Report.xsl"?>
<Колхоз>
    <Columns>
            <Cols name="овцы"    res_id="1" />
            <Cols name="козы"    res_id="2" />
            <Cols name="коровы" res_id="3" />
    </Columns>
    <Стадо name="1">
        <Пастух name="Иванов">
            <Resurs name="овцы"    res_id="1" count="5" />
            <Resurs name="козы"    res_id="2" count="10" />
            <Resurs name="коровы"    res_id="3" count="6"/>
        </Пастух>
        <Пастух name="Петров">
            <Resurs name="овцы"    res_id="1" count="11" />
            <Resurs name="козы"    res_id="2" count="2" />
            <Resurs name="коровы"    res_id="3" count="14"/>
        </Пастух>
    </Стадо>
    <Стадо name="2" >
        <Пастух name="Сидоров">
            <Resurs name="овцы"    res_id="1" count="3" />
            <Resurs name="козы"    res_id="2" count="5" />
            <Resurs name="коровы"    res_id="3" count="2"/>
        </Пастух>
        <Пастух name="Кузнецов">
            <Resurs name="овцы"    res_id="1" count="8" />
            <Resurs name="козы"    res_id="2" count="3" />
            <Resurs name="коровы"    res_id="3" count="4"/>
        </Пастух>
    </Стадо>
</Колхоз>  


Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html"/>
    <xsl:template match="Колхоз">
        <HTML>
            <body>
                <TABLE border="1">
                    <tr>
                        <td>Название</td>
                        <xsl:for-each select="//Cols">
                            <!--xsl:sort data-type="number" order="ascending" select="@res_id"/-->
                            <xsl:sort data-type="number" order="descending" select="@res_id"/>
                            <TD><xsl:value-of select="@name"/></TD>
                        </xsl:for-each>
                    </tr>
                    <xsl:apply-templates select="//Стадо" />
                    <!--  Подведение итога по колхозу-->
                    <TR>
                        <TD>Всего:</TD>
                        <TD><xsl:value-of select="sum(//Resurs[@res_id=1]/@count)" /></TD>
                        <TD><xsl:value-of select="sum(//Resurs[@res_id=2]/@count)" /></TD>
                        <TD><xsl:value-of select="sum(//Resurs[@res_id=3]/@count)" /></TD>
                    </TR>
                </TABLE>
            </body>
        </HTML>
    </xsl:template>
    <xsl:template match="Стадо">
        <TR>
            <TD align="left">
                <xsl:text>Стадо </xsl:text>
             <xsl:value-of select="@name" />
            </TD>
            <TD></TD>
            <TD></TD>
            <TD></TD>
        </TR>
        <xsl:apply-templates select="Пастух" />
        <!--  Итого по стаду -->
        <TR class="RazdelItog">
            <TD><xsl:text>итого по стаду</xsl:text></TD>
            <TD><xsl:value-of select="sum(.//Пастух/Resurs[@res_id=1]/@count)" /></TD>
            <TD><xsl:value-of select="sum(.//Пастух/Resurs[@res_id=2]/@count)" /></TD>
            <TD><xsl:value-of select="sum(.//Пастух/Resurs[@res_id=3]/@count)" /></TD>
        </TR>
    </xsl:template>
    <xsl:template match="Пастух">
        <TR class="Data">
            <TD align="left">
                <xsl:text>Пастух </xsl:text>
                <xsl:value-of select="@name" />
            </TD>
            <TD><xsl:value-of select="(Resurs[@res_id=1]/@count)" /></TD>
            <TD><xsl:value-of select="(Resurs[@res_id=2]/@count)" /></TD>
            <TD><xsl:value-of select="(Resurs[@res_id=3]/@count)" /></TD>
        </TR>
    </xsl:template>
</xsl:stylesheet>


Видите в коде - названия колонок сортируются, но их значения будут выдаваться в одном порядке,
зашитом в коде.
Код

                        <TD><xsl:value-of select="sum(//Resurs[@res_id=1]/@count)" /></TD>
                        <TD><xsl:value-of select="sum(//Resurs[@res_id=2]/@count)" /></TD>
                        <TD><xsl:value-of select="sum(//Resurs[@res_id=3]/@count)" /></TD>

По опыту - здесь надо делать цикл по @res_id, подавая @res_id в требуемом порядке,
Вот только как это изобразить на XSLT - непонятно.

PM MAIL   Вверх
diadiavova
Дата 30.1.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(Veivan @  30.1.2010,  14:05 Найти цитируемый пост)
Видите в коде - названия колонок сортируются, но их значения будут выдаваться в одном порядке,
зашитом в коде.

Ну а как должно быть? Область видимости элемента sort ограничена тем родительским элементом, в котором он определён(в данном случае фор-ич). Для значений нужен либо собственный сорт либо определить их другим способом. Я детально код не изучал, так что если что не понял - поправь. Элемент сорт может быть дочерним по отношению к apply-tamplate(если надо ессно).


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Veivan
Дата 30.1.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Приведя код, я хотел показать, что названия колонок можно сортировать,
а их значение нельзя, так как это зашито в коде.
Код

                        <TD><xsl:value-of select="sum(//Resurs[@res_id=1]/@count)" /></TD>
                        <TD><xsl:value-of select="sum(//Resurs[@res_id=2]/@count)" /></TD>
                        <TD><xsl:value-of select="sum(//Resurs[@res_id=3]/@count)" /></TD>


Да дело не только в сортировке. Например, когда неизвестно заранее число видов ресурсов(я писал - овец, коз, коров),
то сколько строк для суммирования надо записать?
Есть ли способ педставить это в цикле по числу уникальных @res_id?



PM MAIL   Вверх
diadiavova
Дата 30.1.2010, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Функции Distinct в XSLT/XPath нет, но её можно реализовать следуя примерно такой логике: 
Код

//Resurs[not(@name = preceding::Resurs/@name)]
Это выражение XPath будет выбирать из документа только те узлы Resurs, у которых значение атрибута name будет таким, что ранее в документе не встречалось аналогичного узла с таким же значением этого атрибута. То есть первый в наборе.

Это сообщение отредактировал(а) diadiavova - 30.1.2010, 21:15


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Veivan
Дата 31.1.2010, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Спасибо уважаемый diadiavova.
С Вашей помощью я сваял то что хотел-цикл.
Код

            <xsl:for-each select="//Cols">
                <xsl:sort data-type="number" order="descending" select="@res_id"/>
                <xsl:variable name="res_id" select="@res_id" />
                <TD>
                    <xsl:value-of select="sum(//Стадо[@name=$stid]//Resurs[@res_id=$res_id]/@count)" />
                </TD>
            </xsl:for-each>


Теперь можно установить любой порядок сортировки, также не нужно менять XSL при изменении
входных данных(числа ресурсов) в XML. Если любопытно, вот XML

Код

<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="Report.xsl"?>
<Колхоз>
    <Columns>
            <Cols name="овцы"    res_id="1" />
            <Cols name="козы"    res_id="2" />
            <Cols name="коровы" res_id="3" />
            <Cols name="кони" res_id="4" />
    </Columns>
    <Стадо name="1">
        <Пастух name="Иванов">
            <Resurs name="овцы"    res_id="1" count="5" />
            <Resurs name="козы"    res_id="2" count="10" />
            <Resurs name="коровы"    res_id="3" count="6" />
        </Пастух>
        <Пастух name="Петров">
            <Resurs name="овцы"    res_id="1" count="11" />
            <Resurs name="козы"    res_id="2" count="2" />
            <Resurs name="коровы"    res_id="3" count="14" />
            <Resurs name="кони" res_id="4"  count="2"/>
        </Пастух>
    </Стадо>
    <Стадо name="2" >
        <Пастух name="Сидоров">
            <Resurs name="овцы"    res_id="1" count="3" />
            <Resurs name="козы"    res_id="2" count="5" />
            <Resurs name="коровы"    res_id="3" count="2" />
        </Пастух>
        <Пастух name="Кузнецов">
            <Resurs name="овцы"    res_id="1" count="8" />
            <Resurs name="козы"    res_id="2" count="3" />
            <Resurs name="коровы"    res_id="3" count="4" />
        </Пастух>
    </Стадо>
</Колхоз>  


А вот XSL для него:

Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" />
    <xsl:template match="Колхоз">
        <HTML>
            <body>
                <TABLE border="1">
                    <tr>
                        <td>Название</td>
                        <xsl:for-each select="//Cols">
                            <!--xsl:sort data-type="number" order="ascending" select="@res_id"/-->
                            <xsl:sort data-type="number" order="descending" select="@res_id"/>
                            <TD>
                                <xsl:value-of select="@name"/>
                            </TD>
                        </xsl:for-each>
                    </tr>
                    <xsl:apply-templates select="//Стадо" />
                    <!--  Подведение итога по колхозу-->
                    <TR>
                        <TD>Всего:</TD>
                        <xsl:for-each select="//Cols">
                            <xsl:sort data-type="number" order="descending" select="@res_id"/>
                            <xsl:variable name="res_id" select="@res_id" />
                            <TD>
                                <xsl:value-of select="sum(//Resurs[@res_id=$res_id]/@count)" />
                            </TD>
                        </xsl:for-each>
                    </TR>
                </TABLE>
            </body>
        </HTML>
    </xsl:template>
    <xsl:template match="Стадо">
        <xsl:variable name="stid" select="@name" />
        <TR>
            <TD align="left">
                <xsl:text>Стадо </xsl:text>
                <xsl:value-of select="@name" />
            </TD>
            <TD>
            </TD>
            <TD>
            </TD>
            <TD>
            </TD>
        </TR>
        <xsl:apply-templates select="Пастух" />
        <!--  Итого по стаду -->
        <TR class="RazdelItog">
            <TD>
                <xsl:text>итого по стаду</xsl:text>
            </TD>
            <xsl:for-each select="//Cols">
                <xsl:sort data-type="number" order="descending" select="@res_id"/>
                <xsl:variable name="res_id" select="@res_id" />
                <TD>
                    <xsl:value-of select="sum(//Стадо[@name=$stid]//Resurs[@res_id=$res_id]/@count)" />
                </TD>
            </xsl:for-each>
        </TR>
    </xsl:template>
    <xsl:template match="Пастух">
     <xsl:variable name="stid" select="parent::node()/@name" />

        <xsl:variable name="pid" select="@name" />
        <TR class="Data">
            <TD align="left">
                <xsl:text>Пастух </xsl:text>
                <xsl:value-of select="$pid" />
                <!--xsl:value-of select="@name" /-->
            </TD>
            <xsl:for-each select="//Cols">
                <xsl:sort data-type="number" order="descending" select="@res_id"/>
                <xsl:variable name="res_id" select="@res_id" />
                <TD>
                 <xsl:value-of select="//Стадо[@name=$stid]//Пастух[@name=$pid]//Resurs[@res_id=$res_id]/@count" />
                </TD>
            </xsl:for-each>
        </TR>
    </xsl:template>
</xsl:stylesheet>



PM MAIL   Вверх
diadiavova
Дата 31.1.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(Veivan @  31.1.2010,  02:13 Найти цитируемый пост)
С Вашей помощью я сваял то что хотел-цикл.

Не совсем понятно где тут то, о чём я написал, ну да ладно smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

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

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0798 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.