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

У меня не получается вывести данные с помощью фильтрации нужным образом. В схеме у меня три элемента: 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
30.11.2015, 18:50
    #39116693
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация данных при выводе (XSL)
Код: 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
30.11.2015, 20:28
    #39116778
guzzel20
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация данных при выводе (XSL)
_Vasilisk_, спасибо большое! :)
Ещё мне ответили здесь - http://www.cyberforum.ru/xml-xsl/thread1593407.html#post8413283.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Фильтрация данных при выводе (XSL) / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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