xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

XML|HTML, двойные теги и Скрипты.


Автор Сообщение
DrSol
Новичок

Зарегистрирован: 17.02.2009
Сообщения: 1

[13567] Вт Фев 17, 2009 19:25
XML|HTML, двойные теги и Скрипты.
Имеется XSLT шаблон.

Код:

<?xml version="1.0"?>
<xsl:stylesheet
   version="1.0"
   xmlns="http://www.w3.org/1999/xhtml"
   xmlns:php="http://php.net/xsl"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:output method="html" encoding="utf-8"
      doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
      doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes" />   
   
   <xsl:template match="/">
      <html>
         <body>
            <script language="Javascript">
                  if(1 == 1 &amp; 2 == 2)
                     alert(1);
            </script>
            
            <br/>
            <img src="test.jpg"/>
         </body>      
      </html>
   </xsl:template>
</xsl:stylesheet>



Обратите внимание на method="html". В результрующем HTML получается <br></br><img ...></img>. И если на img по большому счету пофиг, то вот br - критичен. ИЕ и Опера считают его за два переноса строки, вся верстка идет лесом.

Если поставить method="xml", то с тегами все в порядке, но скрипт преобразуется в

Код:

<script language="Javascript"><![CDATA[
                  if(1 == 1 & 2 == 2)
                     alert(1);
            ]]></script>


В результате получаем ошибку javascript. Причем если &amp; нет в скрипте, то CDATA не появляется.

Отсюда вопрос - как волков накормить и овец сохранить? Smile В смысле - заставить выводить тег <br /> выводиться именно в таком виде и при этом не потерять javascript.
Vasilisk
Наставник

Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
[13570] Вт Фев 17, 2009 23:43

Чем преобразовуете? Вот результат MSXML6
method="html"

Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:php="http://php.net/xsl">
<body>
<script language="Javascript">
                  if(1 == 1 &amp; 2 == 2)
                     alert(1);
            </script>
<br/>
<img src="test.jpg"/>
</body>
</html>



method="xml"

Код:

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:php="http://php.net/xsl">
<body>
<script language="Javascript">
                  if(1 == 1 &amp; 2 == 2)
                     alert(1);
            </script>
<br />
<img src="test.jpg" />
</body>
</html>


_________________
С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
Fireball
Наставник

Зарегистрирован: 26.02.2008
Сообщения: 282

[13573] Ср Фев 18, 2009 02:48

Думаю, что проблема в том, что доктайпы стоят от XHTML... Насколько мне известно, доктайпы XHTML подразумевают под собой валидный XML в коде, а т.к. output method html, то он пишет открывающие и закрывающие теги для тегов, которые реально не имеют закрывающих.
Гость





[13576] Ср Фев 18, 2009 10:17

Vasilisk писал(а):

Чем преобразовуете?


Apache + PHP
phpinfo(): libxslt Version 1.1.17
libxslt compiled against libxml Version 2.6.26
EXSLT enabled
libexslt Version 0.8.13
Vasilisk
Наставник

Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
[13581] Ср Фев 18, 2009 21:59

Судя по тому, что MSXML преобразовует превильно, значит проблемы не в XSL, а в парсере
_________________
С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
Sergiy
Аспирант

Зарегистрирован: 19.02.2005
Сообщения: 225
Откуда: Киев
Посетить сайт автора
[13641] Пт Мар 20, 2009 03:01

Вариант

Код:


<script>
//<!--
some_code
//-->
</script>


вроде полутше.
Так что рекомендую.
_________________
развлекайся и ни в чём себе не отказывай...
Ex_Soft
Новичок

Зарегистрирован: 13.03.2009
Сообщения: 12

[13643] Пт Мар 20, 2009 09:19

Sergiy писал(а):


Код:


<script>
//<!--
some_code
//-->
</script>



м.б.

Код:


<script>
<!--
some_code
//-->
</script>


???
_________________
"Helo, word!" - 17 errors 56 warnings