powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите понять как работают вложенные циклы for-each ???
13 сообщений из 13, страница 1 из 1
Помогите понять как работают вложенные циклы for-each ???
    #36309526
Rusich2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть XML:
Код: plaintext
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="windows-1251"?>
<SCHEDULE>
  <CINEMA ID="{26A7747B-52AE-4B51-90D2-94FBD787256A}" TITLE="Воскресенск">
    <FILM ID="{E347522C-75F0-4F10-8FFD-6B3203F633B5}" TITLE_RU="Большое путешествие вглубь океанов 3 D" TITLE_ORIG="">
      <SHOWTIME HALL_ID="0" HALL=""> 11 . 11 . 2009   12 : 00 </SHOWTIME>
      <SHOWTIME HALL_ID="0" HALL=""> 11 . 11 . 2009   18 : 00 </SHOWTIME>
      <SHOWTIME HALL_ID="0" HALL=""> 11 . 11 . 2009   21 : 50 </SHOWTIME>
      <SHOWTIME HALL_ID="0" HALL=""> 14 . 11 . 2009   18 : 00 </SHOWTIME>
      <SHOWTIME HALL_ID="0" HALL=""> 15 . 11 . 2009   18 : 00 </SHOWTIME>
    </FILM>
    <FILM ID="{69D2A873-4055-4B14-8083-9B0D0263213F}" TITLE_RU="Пункт назначения: Смертельное путешествие в 3 D" TITLE_ORIG="">
      <SHOWTIME HALL_ID="0" HALL=""> 11 . 11 . 2009   10 : 10 </SHOWTIME>
      <SHOWTIME HALL_ID="0" HALL=""> 11 . 11 . 2009   20 : 00 </SHOWTIME>
      <SHOWTIME HALL_ID="0" HALL=""> 14 . 11 . 2009   16 : 00 </SHOWTIME>
      <SHOWTIME HALL_ID="0" HALL=""> 15 . 11 . 2009   16 : 00 </SHOWTIME>
    </FILM>
    <FILM ID="{71DA7A69-550A-4977-BD33-80A7523700B3}" TITLE_RU="Не оглядывайся" TITLE_ORIG="">
      <SHOWTIME HALL_ID="0" HALL=""> 11 . 11 . 2009   12 : 00 </SHOWTIME>
      <SHOWTIME HALL_ID="0" HALL=""> 11 . 11 . 2009   20 : 30 </SHOWTIME>
    </FILM>
  </CINEMA>
</SCHEDULE>


Сделал XSLT:
Код: plaintext
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.
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" encoding="utf-16" standalone="yes" />
  <xsl:template match="//SCHEDULE/CINEMA">
    <ROOT>
      <xsl:for-each select="FILM">
        <xsl:for-each select="SHOWTIME">
          <kino>
            <KinoDate>
              <xsl:value-of select="substring(., 0, 11)"/>
            </KinoDate>
            <KinoTime>
              <xsl:value-of select="substring(., 12, 2)"/>
              <xsl:value-of select="':'"/>
              <xsl:value-of select="substring(., 15, 2)"/>
            </KinoTime>
            <KinoName>
              <xsl:value-of select="//SCHEDULE/CINEMA/@TITLE"/>
            </KinoName>
            <KinoZal>
              <xsl:if test="//SCHEDULE/CINEMA/FILM/SHOWTIME/@HALL!=''">
                <xsl:value-of select="//SCHEDULE/CINEMA/FILM/SHOWTIME/@HALL"/>
              </xsl:if>
              <xsl:if test="//SCHEDULE/CINEMA/FILM/SHOWTIME/@HALL=''">
                <xsl:value-of select="'-'"/>
              </xsl:if>
            </KinoZal>

            <KinoTitle>
              <xsl:value-of select="@TITLE_RU"/>
            </KinoTitle>
          </kino>
        </xsl:for-each>
      </xsl:for-each>
    </ROOT>
  </xsl:template>
</xsl:stylesheet>

Вопрос: в сформированном XML в тегах
Код: plaintext
1.
2.
3.
<KinoTitle>
<xsl:value-of select="@TITLE_RU"/>
</KinoTitle>
почему-то не выводится название.

Помогите разобраться??? Пожалуйста!!!

Пробовал писать и <xsl:value-of select="@TITLE_RU"/>,
и <xsl:value-of select="//SCHEDULE/CINEMA/FILM/@TITLE_RU"/> - ничего не помогает!!!

Что делать?!
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #36309559
Rusich2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хе-хе! :) Я разобрался кажется!!!

Нужно использовать в первом цикле это:

Код: plaintext
<xsl:variable name="TITLE_RU" select="@TITLE_RU" />

и затем писать так:

Код: plaintext
1.
2.
3.
<KinoTitle>
<xsl:value-of select="$TITLE_RU"/>
</KinoTitle>

Я правильно поступил???
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #36310322
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rusich2012Я правильно поступил???Да. Можно еще так
Код: plaintext
<xsl:value-of select="../@TITLE_RU"/>
Просто нужно знать, что <xsl:for-each> и <xsl:template> изменяют контекстный узел
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Помогите понять как работают вложенные циклы for-each ???
    #37189438
Сирин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<xsl:variable name="available-pub-files">
    <xsl:copy-of select="/response/pubfiles/pubfile"/>
</xsl:variable>

<xsl:for-each select="msxsl:node-set($available-pub-files)/pubfile">
    <xsl:value-of select="/response"/> <!--  Нет доступа к /response  -->
</xsl:for-each>
Шо делать?
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #37189462
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сирин
Код: plaintext
<xsl:value-of select="/response"/> <!--  Нет доступа к /response  -->
Шо делать?Шо значит нет доступа? Шо тебе это сказало? А шо, у тебя response корневой элемент? И шо ты хочешь вывести из корневого элемента?
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #37189489
Сирин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет доступа -- значит не могу ничего вывести из корневого элемента.
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #37189501
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сирин,

У тебя в корневом элементе есть текст?
Подозреваю, в цикл не входит. такой путь в xml есть?
Код: plaintext
/response/pubfiles/pubfile/pubfile
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #37189514
Сирин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В корневом нет текста, в нём много узлов. Я написал select="/response" для упрощения. count(/response) выводит 0, из этого и делаю вывод что "нет" у меня корневого элемента.
/response/pubfiles/pubfile/pubfile -- нет такого.
В цикл входит, итерации есть. Код максимально упрощён, оставил только суть проблемы.
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #37189526
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сиринcount(/response) выводит 0Можно сильно упрощенный XML - и XSL, который это бы продемонстрировал?
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #37189573
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сирин,

Действительно, for-each в данном случае меняет не просто контекст узла, а получается, контекст документа - попробуй так:
Код: plaintext
1.
2.
3.
<xsl:variable name="root_node" select="/"/>
...
<xsl:for-each ...>
	<xsl:value-of select="$root_node/response"/>
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #37189628
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сирин,

Вот так может проще: (и не привязан к MS, и версия 1.0)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:template match="/">
		<xsl:variable name="available-pub-files" select="/response/pubfiles/pubfile"/>
		<!-- -->
		<root>
			<xsl:for-each select="$available-pub-files">
				<item>
					<xsl:value-of select="/response"/>
				</item>
			</xsl:for-each>
		</root>
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #37190138
Сирин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй вариант я регулярно использую, но тут случай такой, что available-pub-files необходимо формировать по-разному, в зависимости от некоторых условий. В одной ветке copy-of всех pubfile, а в другой только некоторой части. В моём примере условий нет, я их опустил для простоты. Попробую ваш первый вариант.
...
Рейтинг: 0 / 0
Помогите понять как работают вложенные циклы for-each ???
    #37191721
Сирин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый вариант работает.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите понять как работают вложенные циклы for-each ???
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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