Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите понять как работают вложенные циклы for-each ??? / 13 сообщений из 13, страница 1 из 1
13.11.2009, 15:25
    #36309526
Rusich2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять как работают вложенные циклы for-each ???
Здравствуйте!

Есть 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
13.11.2009, 15:33
    #36309559
Rusich2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять как работают вложенные циклы for-each ???
Хе-хе! :) Я разобрался кажется!!!

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

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

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

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

Я правильно поступил???
...
Рейтинг: 0 / 0
14.11.2009, 00:42
    #36310322
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять как работают вложенные циклы for-each ???
Rusich2012Я правильно поступил???Да. Можно еще так
Код: plaintext
<xsl:value-of select="../@TITLE_RU"/>
Просто нужно знать, что <xsl:for-each> и <xsl:template> изменяют контекстный узел
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
30.03.2011, 09:43
    #37189438
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять как работают вложенные циклы for-each ???
Код: 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
30.03.2011, 09:55
    #37189462
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять как работают вложенные циклы for-each ???
Сирин
Код: plaintext
<xsl:value-of select="/response"/> <!--  Нет доступа к /response  -->
Шо делать?Шо значит нет доступа? Шо тебе это сказало? А шо, у тебя response корневой элемент? И шо ты хочешь вывести из корневого элемента?
...
Рейтинг: 0 / 0
30.03.2011, 10:04
    #37189489
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять как работают вложенные циклы for-each ???
Нет доступа -- значит не могу ничего вывести из корневого элемента.
...
Рейтинг: 0 / 0
30.03.2011, 10:08
    #37189501
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять как работают вложенные циклы for-each ???
Сирин,

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

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

Вот так может проще: (и не привязан к 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
30.03.2011, 13:48
    #37190138
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять как работают вложенные циклы for-each ???
Второй вариант я регулярно использую, но тут случай такой, что available-pub-files необходимо формировать по-разному, в зависимости от некоторых условий. В одной ветке copy-of всех pubfile, а в другой только некоторой части. В моём примере условий нет, я их опустил для простоты. Попробую ваш первый вариант.
...
Рейтинг: 0 / 0
31.03.2011, 10:12
    #37191721
Сирин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять как работают вложенные циклы for-each ???
Первый вариант работает.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите понять как работают вложенные циклы for-each ??? / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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