Xsl преобразования

Статус
Закрыто для дальнейших ответов.

S1l3nt

Member
Регистрация
24.10.2006
Сообщения
18
Доброго времени суток! Возникла такая проблема нужно полученые данные в формате xml преобразовать в html при помощи шаблона xsl. Сам шаблон XSL:
Код:
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
	  <xsl:for-each select="data">
		 <b><xsl:value-of select="Headers" /></b><br /><br />
	  </xsl:for-each>
   <xsl:call-template name="menu" />
   </xsl:template>
   <xsl:template name="menu">
	  <table border="1" cellpadding="5" cellspacing="0" bordercolor="#505C96" align="center">
		 <tr>
			<th>1</th>
			<th>2</th>
			<th>3</th>
			<th>4</th>
		</tr>
		<xsl:for-each select="data/row">
		   <tr>
			  <td><xsl:value-of select="1" /></td>
			  <td><xsl:value-of select="2" /></td>
			  <td><xsl:value-of select="3" /></td>
			  <td><table border="1" cellpadding="5" cellspacing="0">
				 <xsl:for-each select="data/row/4">
				 <tr>   
					<td><xsl:value-of select="5" /></td>
					<td><xsl:value-of select="6" /></td>
				 </tr>
				 </xsl:for-each>
				 </table>
			  </td>
		   </tr>
		</xsl:for-each>
	</table>
</xsl:template>
</xsl:stylesheet>
Входные данные идут в формате:
Код:
<?xml version="1.0" encoding="UTF-8" ?> 
- <data>
  <Headers>Хедерсы</Headers> 
- <row>
  <1>1</1> 
  <2>2</2>
  <3>3</3>
- <4>
  <5>5</5> 
  <6>6</6> 
  <5>5</5> 
  <6>6</6> 
  </4>
  </row>
- <row>
  <1>1</1> 
  <2>2</2>
  <3>3</3>
- <4>
  <5>5</5> 
  <6>6</6> 
  <5>5</5> 
  <6>6</6> 
  </4>
  </row>
Проблема в том, что при обходе внутреннего цикла у меня не производится отображение записей. Если делаю вывод какой-либо строки (типа 'Hello world!') без цикла, то всё ок. То что разные кодировки ничего не меняет. Пробовал переделывать - результата 0. Может у кого есть идеи по этому поводу?
 

S1l3nt

Member
Регистрация
24.10.2006
Сообщения
18
Прошу прощения, числа в именах элементов стоят только для примера. На самом деле я использую буквенные названия. Причём всё работает. Обход внешнего цикла происходит без проблем, а вот когда я делаю обход внутреннего цикла, то в элементе <td> внешней таблицы ничего выводится. Если убрать цикл и во внутреннюю таблицу записать статические переменные, то всё ок.
 

S1l3nt

Member
Регистрация
24.10.2006
Сообщения
18
Решил обойтись без xsl преобразований. Генерирую страницу html на сервере. Всё работает.
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
если можно, то вместо цифр все-таки код дайте, ощущение что где то здесь <xsl:value-of select="1" /> ошибка
 

S1l3nt

Member
Регистрация
24.10.2006
Сообщения
18
если можно, то вместо цифр все-таки код дайте, ощущение что где то здесь <xsl:value-of select="1" /> ошибка
Код:
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
	  <xsl:for-each select="data">
		 <b><xsl:value-of select="Headers" /></b><br /><br />
	  </xsl:for-each>
   <xsl:call-template name="menu" />
   </xsl:template>
   <xsl:template name="menu">
	  <table border="1" cellpadding="5" cellspacing="0" bordercolor="#505C96" align="center">
		 <tr>
			<th>ФИО</th>
			<th>Учётная запись</th>
			<th>Трафик</th>
			<th>Детализация</th>
		</tr>
		<xsl:for-each select="data/row">
		   <tr>
			  <td><xsl:value-of select="FIO" /></td>
			  <td><xsl:value-of select="Account" /></td>
			  <td><xsl:value-of select="Traffic" /></td>
			  <td><table border="1" cellpadding="5" cellspacing="0">
				 <xsl:for-each select="/data/row/detaled">
				 <tr>   
					<td>
					<xsl:element name="a">
						  <xsl:attribute name="href">#</xsl:attribute>
						  <xsl:attribute name="onclick">javascript</xsl:attribute>
						  <xsl:value-of select="IP" /> -  <xsl:value-of select="bytes" />
					</xsl:element>
					</td>
				 </tr>
				 </xsl:for-each>
				 </table>
			  </td>
		   </tr>
		</xsl:for-each>
	</table>
</xsl:template>
</xsl:stylesheet>
Немного поковыряв увидел, что если массив detaled называть со строчной буквы, то цикл проходит по всем записям и выдаёт результат, а если с прописной буквы (Detaled) цикл не работает. Но даже когда внутренний цикл работает, выдаёт информацию по всем записям, которые есть в документе xml, в данном случае это все клиентские ip. А это не есть правильно. Нужно, чтобы он выдавал только те ip, которые относятся к юзеру.
 

Petruxa

Well-Known Member
Регистрация
20.01.2007
Сообщения
180
Я б вам посоветовал на Woweb.ru обратится, там народ реально поможет,
тут только ссылку датут, и всё,это бюро перенаправлений.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ