Вывод данных с помощью вложенных for-each (xsl)

Тема в разделе "HTML, CSS, XML, JavaScript", создана пользователем guzzel200, 28 ноя 2015.

Метки:
  1. guzzel200

    guzzel200 New Member

    Регистрация:
    28 ноя 2015
    Сообщения:
    2
    Симпатии:
    0
    Всем привет, очень нуждаюсь в вашей помощи!
    У меня не получается вывести данные с помощью фильтрации нужным образом. В схеме у меня три элемента: Kafedry, который состоит из двух элементов Kafedra и Prepodavateli.
    Нужно вывести все кафедры и под каждым список преподавателей этой кафедры. Данные элементы связаны полем id_kaf.
    Вид должен быть такой:

    Порядковый номер: 1
    Название: Вычислительная техника
    Заведующий: Иванов Иван Иванович
    Телефон: 8422908765

    Порядковый номер: 1​
    Фамилия, имя, отчество: Петров Пётр Петрович​
    Номер кафедры: 1​
    Степень: Доктор технических наук​
    Звание: Профессор​
    Телефон: 89098975634​
    Дата рождения: 1949-05-29​

    Порядковый номер: 2​
    Фамилия, имя, отчество: Сидоров Андрей Алексеевич​
    Номер кафедры: 1​
    Степень: Кандидат технических наук​
    Звание: Доцент​
    Телефон: 89086719201​
    Дата рождения: 1985-09-27​

    Порядковый номер: 2
    Название: Измерительно-вычислительные комплексы
    Заведующий: Алексеев Михаил Иванович
    Телефон: 86746549876

    И так далее.

    Пробовала многими способами это сделать, но ничего не выходит. Вот например этот вариант (цикл в цикле):
    Код (HTML5):
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
        <xsl:output indent="yes"/>   
        <xsl:template match="Kafedry">
            <h3><span style="margin-left:35pt">Кафедры и преподаватели</span></h3>
            <xsl:for-each select="Kafedra" >
                <span style="margin-left:10pt"><span style="font-style:italic">Порядковый номер: </span></span>
                <span style="font-weight:bold"><xsl:value-of select="id_kaf"/><br/></span>
                <span style="margin-left:10pt"><span style="font-style:italic">Название: </span></span>
                <span style="font-weight:bold"><xsl:value-of select="name_kaf"/><br/></span>
                <span style="margin-left:10pt"><span style="font-style:italic">Заведующий: </span></span>
                <xsl:value-of select="zav_kaf"/><br/>
                <span style="margin-left:10pt"><span style="font-style:italic">Телефон: </span></span>
                <xsl:value-of select="telefon_kaf"/><br/>
                <span style="margin-left:10pt"><span style="font-style:italic">Почта: </span></span>
                <xsl:value-of select="pochta_kaf"/><br/><br/>
                 <xsl:for-each select="../Prepodavateli[@id_kaf=preceding-sibling::Kafedra/@id_kaf]" >
                    <span style="margin-left:10pt"><span style="font-style:italic">Порядковый номер: </span></span>
                    <span style="font-weight:bold"><xsl:value-of select="id_prep"/><br/></span>
                    <span style="margin-left:10pt"><span style="font-style:italic">Фамилия, имя, отчество: </span></span>
                    <span style="font-weight:bold"><xsl:value-of select="name_prep"/><br/></span>
                    <span style="margin-left:10pt"><span style="font-style:italic">Номер кафедры: </span></span>
                    <xsl:value-of select="id_kaf"/><br/>
                    <span style="margin-left:10pt"><span style="font-style:italic">Степень: </span></span>
                    <xsl:value-of select="stepen_prep"/><br/>
                    <span style="margin-left:10pt"><span style="font-style:italic">Звание: </span></span>
                    <xsl:value-of select="zvanie_prep"/><br/>
                    <span style="margin-left:10pt"><span style="font-style:italic">Телефон: </span></span>
                    <xsl:value-of select="telefon_prep"/><br/>
                    <span style="margin-left:10pt"><span style="font-style:italic">Дата рождения: </span></span>
                    <xsl:value-of select="dataRozhd_prep"/><br/><br/>
                </xsl:for-each>
            </xsl:for-each>
        </xsl:template>
    </xsl:stylesheet>
    При таком варианте выводится только список кафедр.
    Найдите, пожалуйста, ошибку или предложите другой вариант. Я никак не пойму, почему не правильно :(
    P.S. Если нужно, могу прислать файлы.
     
  2. guzzel200

    guzzel200 New Member

    Регистрация:
    28 ноя 2015
    Сообщения:
    2
    Симпатии:
    0
    Во вложенных циклах нашла ошибку. Правильно так:
    Код (HTML5):
    xsl:for-each select="Kafedra">
    ....
        <xsl:for-each select="../Prepodavateli[id_kaf=current()/id_kaf]">
     
Загрузка...

Поделиться этой страницей