Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XLST + XML = HTML (Не пойму в чем ошибка [дубля 2]) / 11 сообщений из 11, страница 1 из 1
21.11.2012, 15:38
    #38047183
rush.khaz.88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
Помогите разобраться
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
21.11.2012, 15:39
    #38047189
rush.khaz.88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
Сразу поправляюсь, при выборе type1 - выбирается 1 вопрос, хотя по идеи должно 2
...
Рейтинг: 0 / 0
21.11.2012, 16:03
    #38047253
rush.khaz.88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
Потыкал разные варианты, и выяснилось если просто выводить текст в
Код: xml
1.
2.
3.
4.
<xsl:if test="@name='type1'">
	<xsl:apply-templates select="type"/>
	           input	
	</xsl:if>


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

Что-то не вижу я в xml вложений type друг в друга.
...
Рейтинг: 0 / 0
21.11.2012, 16:06
    #38047260
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
Пардон, вижу.
...
Рейтинг: 0 / 0
21.11.2012, 16:09
    #38047270
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
Попробуй <xsl:apply-templates select="." />
...
Рейтинг: 0 / 0
21.11.2012, 16:18
    #38047292
rush.khaz.88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
Antonariy, выражаю огромную благодарность!!!!! Действительно, из-за этого вся головная боль. Не могли бы вы объяснить в каких случаях ставится точка а в каких нет. Я с XSLT первый день, до этого вобще не касался..
...
Рейтинг: 0 / 0
21.11.2012, 16:31
    #38047329
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
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
21.11.2012, 16:34
    #38047343
rush.khaz.88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
mage.lan, ну это уже мастер-класс) спасибо, учту это в проекте)
...
Рейтинг: 0 / 0
21.11.2012, 16:51
    #38047385
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
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
21.11.2012, 22:01
    #38047833
rush.khaz.88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XLST + XML = HTML (Не пойму в чем ошибка [дубля 2])
mage.lan, спасибо. Завтра на работе проанализирую, все альтернативы, вами показанные
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XLST + XML = HTML (Не пойму в чем ошибка [дубля 2]) / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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