powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
11 сообщений из 11, страница 1 из 1
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047183
rush.khaz.88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разобраться
XSLT:
Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
<?xml version="1.0" encoding="windows-1251"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="/">
    <xsl:apply-templates select="body"/>
  </xsl:template>

  <xsl:template match="body">
    
      <xsl:apply-templates select="type"/>
    
  </xsl:template>
  

  <xsl:template match="type">
    
	<fieldset>
	 <table>
	  <xsl:for-each select="question"> 
		<tr><td style="font-size: medium; font-weight: bold; font-style: italic">
			<xsl:value-of select="."/>
		 </td></tr>
      </xsl:for-each>
	  
	  <xsl:for-each select="answer"> 
        <tr><td>
		<xsl:value-of select="."/>
        </td>
		<td>
             <input type="checkbox"/>
             </td>
			 </tr>
      </xsl:for-each>
	  </table>
	  
	  
	  
	  <xsl:for-each select="type">
          <xsl:choose>
                    <!--Подозрение на это место-->
			<xsl:when test="@name='type2'">
			
				
				<xsl:apply-templates />
			
			</xsl:when>		
		</xsl:choose>
		</xsl:for-each>
      
	  
	</fieldset>
  </xsl:template>

 
  
</xsl:stylesheet>



HTML:
Код: html
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.
44.
<body>
   <type name="type1">
       <type name="type2">
           <question>
               Нравится ли тебе обстановка в вашей стране?
           </question>
           <answer>
               Да
           </answer>
           <answer>
               Нет
           </answer>
           <answer>
               Затрудняюсь ответить
           </answer>
           </type>
      <type name="type1">
            <question>
                 Нравится ли тебе обстановка в вашем городе?
            </question>
            <answer>
                 Да
            </answer>
            <answer>
                  Нет
            </answer>
            <answer>
                  Затрудняюсь ответить
            </answer>
        </type>
        <question>
             Нравится ли тебе обстановка в мире?
        </question>
        <answer>
             Да
        </answer>
        <answer>
              Нет
        </answer>
        <answer>
              Затрудняюсь ответить
         </answer>
    </type>
</body>



По идеи, при выборе " type2 " у меня должны отобразиться два вопроса с типами type2, но отображается всего один...- "Нравится ли тебе обстановка в мире?" . Почему так происходит.
...
Рейтинг: 0 / 0
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047189
rush.khaz.88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сразу поправляюсь, при выборе type1 - выбирается 1 вопрос, хотя по идеи должно 2
...
Рейтинг: 0 / 0
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047253
rush.khaz.88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потыкал разные варианты, и выяснилось если просто выводить текст в
Код: xml
1.
2.
3.
4.
<xsl:if test="@name='type1'">
	<xsl:apply-templates select="type"/>
	           input	
	</xsl:if>


То текст выводится, получается сам шаблон не рекурсирует (не замыкается сам на себя)
...
Рейтинг: 0 / 0
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047257
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
<xsl:template match="type">
    ...
     <xsl:for-each select="type">

Что-то не вижу я в xml вложений type друг в друга.
...
Рейтинг: 0 / 0
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047260
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, вижу.
...
Рейтинг: 0 / 0
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047270
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй <xsl:apply-templates select="." />
...
Рейтинг: 0 / 0
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047292
rush.khaz.88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy, выражаю огромную благодарность!!!!! Действительно, из-за этого вся головная боль. Не могли бы вы объяснить в каких случаях ставится точка а в каких нет. Я с XSLT первый день, до этого вобще не касался..
...
Рейтинг: 0 / 0
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047329
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rush.khaz.88,

вместо этого
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:for-each select="type">
          <xsl:choose>
                    <!--Подозрение на это место-->
			<xsl:when test="@name='type2'">
			
				
				<xsl:apply-templates />
			
			</xsl:when>		
		</xsl:choose>
		</xsl:for-each>


обычно пишут
Код: xml
1.
2.
3.
<xsl:if test="type[@name='type2']">
    <xsl:apply-templates select="type[@name='type2']" />
</xsl:if>



Точка означает позвать самого себя. Т.е. В цикле вы уже находитесь во вложенном тайпе и хотите 3й уровень вложенности, которого у вас нет.
...
Рейтинг: 0 / 0
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047343
rush.khaz.88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan, ну это уже мастер-класс) спасибо, учту это в проекте)
...
Рейтинг: 0 / 0
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047385
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rush.khaz.88,

мастер класс это другое. дъявол в мелочах
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<xsl:template match="/">
    <xsl:apply-templates select="body"/>
  </xsl:template>

  <xsl:template match="body">
    
      <xsl:apply-templates select="type"/>
    
  </xsl:template>


Если вам не нужно ничего делать в боди, просто избавьтесь от него.
Код: xml
1.
2.
3.
<xsl:template match="/">
    <xsl:apply-templates select="body/type"/>
  </xsl:template>



Так лучше не писать и вообще точку лучше не использовать:
Код: xml
1.
<xsl:value-of select="."/>


Писать так:
Код: xml
1.
<xsl:value-of select="text()"/>


Через 3 месяца когда вы вернетесь, чтобы выяснить почему вопрос с тегами, а теги не рисуются, вы скажите себе спасибо и просто замените на
Код: xml
1.
<xsl:copy-of select="node()"/>
...
Рейтинг: 0 / 0
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
    #38047833
rush.khaz.88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan, спасибо. Завтра на работе проанализирую, все альтернативы, вами показанные
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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