<xsl:include> xmlns

dvp

Новичок
<xsl:include> xmlns

Доброе время суток, девелоперы.

Я столкнулся с несколькими непреодолимыми проблемами.

Есть 2 стиля:
http://autowp.ru/base.xsl
http://autowp.ru/index.xsl

PHP программа ( http://autowp.ru/index.php ) генерирует XML документ и инициирует трансформацию этого кода стилем index.xsl в выходной XML, который должен представлять из себя XHTML.
Стиль index.xsl при обработке включает (xsl:include) в себя стиль base.xsl.
Проблема состиот в том, что в выходном документе часть документа, обработанная шаблонами стиля base.xsl в кажом из тегов содержит аттирибут xmlns="". Часть документа, обработанная шаблонами index.xsl выводится как надо.

Как исправить положение?

p.s. используется PHP5+libxml2

-~{}~ 17.01.05 14:58:

Вот фрагмент выходного (недо-)XHTML, обработанный шаблонами включенного стиля:

<br xmlns="">
<a xmlns="" href="/avto/alfa_romeo/">Alfa Romeo</a>
<br xmlns="">
<a xmlns="" href="/avto/aston_martin/">Aston Martin</a>
<br xmlns="">
<a xmlns="" href="/avto/audi/">Audi</a>
<br xmlns="">

-~{}~ 17.01.05 15:09:

И ещё вопрос: Как выходному документы задать DOCTYPE? Можно было бы просто вывести его прям из PHP, если бы стиль не добавлял в начало документа <?xml version="1.0" encoding="windows-1251"?>
 

slach

Новичок
DOCTYPE задается в <xsl:eek:utput doctype-public="" doctype-system="" />

убирание <?xml version="1.0"?> опять же там
<xsl:eek:utput omit-xml-declaration="no">

кстати ? что плохого в <?xml version?? в начале документа??
если у тебя на выходе все равно XHTML ?

насчет пустого XMLNS ... я честно говоря не увидел у тебя ничего подозрительного

разве что объявление
<xsl:eek:utput method="xml" version="1.0" encoding="windows-1251"/>

в base.xsl
 

chameleon

Новичок
определи дефолтное пространство имен в стилях как XHTML, а то они у тебя с пустыми и копируются.
 

dvp

Новичок
slach, спасибо. DOCTYPE теперь есть. А <?xml version я и не хотел убирать, просто если бы его не было, то я мог бы в выходной поток перед выводом того, что вернулось из XSLT вывести <?xml ver ....... <!DOCTYPE ..... В общем сделано.

chameleon, где в Стилях прописать namespace? И как? Что-то я совсем запутался?


Кстати, на какой mime лучше проверять HTTP_ACCEPT, чтобы выдавать на клиентское XSLT? На text/xml или application/xml?
 

chameleon

Новичок
chameleon, где в Стилях прописать namespace? И как? Что-то я совсем запутался?
ну в корневом контейнере например:
PHP:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
 

dvp

Новичок
chameleon, спасибо. Всё верно - именно этого не хватало. Только вот теперь почему-то IE отказывается делать XSLT, хотя даже привередливый FireFox его съел.
 

dvp

Новичок
хм.... никак. Просто белый экран.
Подозреваю, что он его как text/plain принимает

Как нужно обозначить, что я XML, которая потом захочет XSLT:

Content-Type: text/xml; charset="windows-1251"
или
Content-Type: text/xml; charset=windows-1251
или
Content-Type: text/xml; charset=windows:1251

или ещё как?

-~{}~ 17.01.05 16:55:

т.е.

Content-Type: text/xml; charset="windows-1251"
или
Content-Type: text/xml; charset=windows-1251
или
Content-Type: text/xml; charset:windows-1251

-~{}~ 17.01.05 17:07:

Хотя кажется дело не в Mime-type.... FireFox вроде ругается, когда mime неправильная, а щас он нормально отрабатывает. Значит ошибка где-то в XML+XSL
 

chameleon

Новичок
Как нужно обозначить, что я XML, которая потом захочет XSLT
1. в PI ссылка на XSLT правильная?.
2. mime для XHTML - application/xhtml+xml (специально для IE, который не умеет XHTML - text/html)
 

dvp

Новичок
1. Правльная - FireFox её находит. Да и вообще - правльная :)
2. Не. Mime, который выдаётся при серверном XSLT - это понятно. так всё работает. А вот при клиентском XSLT какой дать?

-~{}~ 17.01.05 17:43:

Не знаю, что я сделал, но заработало. Огромное всем, кто помогал, человечексое спасибо.
 
Сверху