powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите разобраться с составным ключом
3 сообщений из 3, страница 1 из 1
Помогите разобраться с составным ключом
    #38425406
Qfab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется вот такой вот файл 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="lab.xsl"?>
<lab>
	<course id="XML">
		<title>XML и XSLT. Современные технологии обработки данных для Web</title>
		<keywords>
			<keyword>XML</keyword>
			<keyword>XML Schema</keyword>
			<keyword>XPath</keyword>
			<keyword>XSLT</keyword>
		</keywords>
		<teachers>
			<teacher>Никитин И.Г.</teacher>
			<teacher>Павлов Ю.Е.</teacher>
		</teachers>
	</course>
	<course id="AJAX">
		<title>AJAX. Разработка web-приложений для Web 2.0</title>
		<keywords>
			<keyword>AJAX</keyword>
			<keyword>XML</keyword>
			<keyword>XML Schema</keyword>
			<keyword>JavaScript</keyword>
			<keyword>XSLT</keyword>
		</keywords>
		<teachers>
			<teacher>Никитин И.Г.</teacher>
			<teacher>Чебыкин Р.И.</teacher>
		</teachers>
	</course>
	<course id="PHP">
		<title>Профессиональное программирование на PHP 5</title>
		<keywords>
			<keyword>PHP</keyword>
			<keyword>XML</keyword>
			<keyword>XSLT</keyword>
		</keywords>
		<teachers>
			<teacher>Никитин И.Г.</teacher>
			<teacher>Борисов И.О.</teacher>
		</teachers>
	</course>
</lab>


А вот соответствующая таблица преобразования lab.xsl:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" encoding="UTF-8" />
	<xsl:key name="ixCourseTeacherKeyword" match="/lab/course/teachers/teacher" use="concat(., '-', ../../keywords/keyword)" />
 	<xsl:template match="/">
		<html>
			<head>
				<title>lab</title>
			</head>
			<body>
				<p>Курсы, которые читает преподаватель Борисов И.О., и в которых есть тема XSLT: <xsl:apply-templates select="key('ixCourseTeacherKeyword', 'Борисов И.О.-XSLT')" /></p>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="teacher">
		<xsl:value-of select="../../@id" />
		<xsl:if test="position() < last()">
			<xsl:text>, </xsl:text>
		</xsl:if>
	</xsl:template>
</xsl:stylesheet>


Логично, что на выходе должно быть получено - PHP . Но в том то и проблема, что данный результат не получается. Перепробовав разные варианты, я пришёл к выводу (если не прав - поправьте) - вся соль в функции concat, а именно в выражении получения доступа к вложенному узлу ../../ keywords/keyword . Если подставить ../../ title , то всё работает хорошо.
Первоначальный вид ключа был
Код: xml
1.
<xsl:key name="ixCourseTeacherKeyword" match="/lab/course" use="concat(teachers/teacher, '-', keywords/keyword)" />


что более понятно, но он работает лишь при условии что указаны только первые вложенные узлы ( Никитин И.Г. - XML или Никитин И.Г. - AJAX или Никитин И.Г. - PHP ):
Код: xml
1.
<xsl:apply-templates select="key('ixCourseTeacherKeyword', 'Никитин И.Г.-PHP')" />


Нигде подобной ситуации не встречал - ни в книгах, ни в сети - а очень хочется разобраться, что к чему (ведь по идее не должно было быть никаких сложностей). Помогите разобраться в данной ситуации.
...
Рейтинг: 0 / 0
Помогите разобраться с составным ключом
    #38425453
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qfab,

вариант:
Код: 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" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="UTF-8"/>

  <xsl:template match="/">
    <html>
      <head>
        <title>lab</title>
      </head>
      <body>
        <p>
          Курсы, которые читает преподаватель Борисов И.О., и в которых есть тема XSLT:
          <xsl:apply-templates select="//course[teachers/teacher='Борисов И.О.' and keywords/keyword='XSLT']"/>
        </p>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="course">
    <p>
      <xsl:value-of select="./title"/>
    </p>
  </xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
Помогите разобраться с составным ключом
    #38425994
Qfab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
За такое решение спасибо, но нужен именно вариант с составным ключом, ибо в нём вся соль. Т.е. в данной ситуации получить желаемый результат возможно различными способами (xml позволяет), но как его получить, применяя именно составной ключ - для меня пока загадка. Возможно, кто-то уже сталкивался с таким и знает решение.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите разобраться с составным ключом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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