powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Фильтрация данных при выводе (XSL)
3 сообщений из 3, страница 1 из 1
Фильтрация данных при выводе (XSL)
    #39115391
guzzel20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, очень нуждаюсь в вашей помощи!

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

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

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

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

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

И так далее.

Пробовала многими способами это сделать, но ничего не выходит. Вот например этот вариант (цикл в цикле):
Код: 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.
34.
<?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: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='../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>



То есть фильтр сделала такой:
Код: xml
1.
<xsl:for-each select="../Prepodavateli[id_kaf='../Kafedra[id_kaf]']">



При таком варианте выводится только список кафедр.

Если сделать так, то выводятся каждый раз преподаватели после каждой кафедры:
Код: xml
1.
<xsl:for-each select="../Prepodavateli">



Найдите, пожалуйста, ошибку или предложите другой вариант. Я никак не пойму, почему не правильно :(

P.S. Если нужно, могу прислать файлы.
...
Рейтинг: 0 / 0
Фильтрация данных при выводе (XSL)
    #39116693
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<xsl:template match="Kafedry">
  <xsl:aply-templates select="Kafedra" mode="group"/>
</xsl:template>

<xsl:template match="Kafedra" mode="group">
  <xsl:if test="not(preceding-sibling::Kefedra[@id_kaf = current()/@id_kaf])">
    <xsl:aply-templates select="../Kafedra[@id_kaf = current()/@id_kaf]"/>
  </xsl:if>
</xsl:template>

<xsl:template match="Kafedra">
  <span>...........
  ................
</xsl:template>
...
Рейтинг: 0 / 0
Фильтрация данных при выводе (XSL)
    #39116778
guzzel20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_, спасибо большое! :)
Ещё мне ответили здесь - http://www.cyberforum.ru/xml-xsl/thread1593407.html#post8413283.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Фильтрация данных при выводе (XSL)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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