Автор |
Сообщение |
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 & 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. Причем если & нет в скрипте, то CDATA не появляется.
Отсюда вопрос - как волков накормить и овец сохранить? В смысле - заставить выводить тег <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 & 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 & 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
|