Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP5+DOM+XSLT непонятное поведение.

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Swappp

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как то странное себя ведет xslt процессор php5.
Есть файлы:
index.php

Код:
<?PHP
$xml_doc_node = new DOMDocument('1.0', "UTF-8");
$xml_style = $xml_doc_node->createProcessingInstruction('xml-stylesheet');
$xml_doc_node->appendChild($xml_style);
$xml_style->nodeValue = 'href="html.xsl" type="text/xsl"';
$xml_page = $xml_doc_node->createElement('document');
$xml_doc_node->appendChild($xml_page);
$element = $xml_page->appendChild(new DOMElement('old-html'));
$div = $element->appendChild(new DOMElement('div', 'test'));
$div->setAttribute('xmlns','http://www.w3.org/1999/xhtml');
$xsl = DOMDocument::load('html.xsl');
$proc = new xsltprocessor;
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml_doc_node);
echo "\n";
$text_xml = $xml_doc_node->saveXML();
$xml = DOMDocument::loadXML($text_xml);
echo $text_xml;
echo "\n";
echo $proc->transformToXML($xml);
?>

html.xsl

Код:
<?xml version='1.0' encoding='UTF-8'?>  
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="windows-1251"/>
  <xsl:template match="/document">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
      <body>
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="/document/old-html"><xsl:copy-of select="*"/></xsl:template>
</xsl:stylesheet>

 
На выводе получаем:

Код:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
  <body>
    <div xmlns="" xmlns="http://www.w3.org/1999/xhtml">test</div>
  </body>
</html>
 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="html.xsl" type="text/xsl"?>
<document><old-html><div xmlns="http://www.w3.org/1999/xhtml">test</div></old-html></document>
 
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
  <body>
    <div>test</div>
  </body>
</html>
 

Ладно, если бы был только один xmlns, но на двух спотыкаются некоторые xml-парсеры, например mozilla. Так в чем проблема, почему xslt процессор на деревьях с одинаковыми данными, но одно создано на лету, а другое загружено из строки (которая в свою очередь была получена из первого дерева) ведет себя по разному? И как с этим бороться? Пробовал $xml_doc_node->normalize(), не помогло.
P.S. Второй вариант правильный, его и надо добиться, но хотелось бы без перестройки дерева.

Всего записей: 1716 | Зарегистр. 02-11-2001 | Отправлено: 01:01 12-12-2004 | Исправлено: Swappp, 01:36 12-12-2004
beeos



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
попробуй вместо

Код:
 
$div = $element->appendChild(new DOMElement('div', 'test'));  
 

сделать

Код:
 
$test =  $xml_doc_node->createTextNode('test');
$div = $element->appendChild($xml_doc_node->createElement('div'));
$div->appendChild($test);
 

Всего записей: 329 | Зарегистр. 06-01-2004 | Отправлено: 12:18 13-12-2004 | Исправлено: beeos, 12:19 13-12-2004
Swappp

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
beeos
Не помогло, это скорее всего баг, оправил его на http://bugs.php.net/ но пока ответов нет.

Всего записей: 1716 | Зарегистр. 02-11-2001 | Отправлено: 14:39 13-12-2004
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP5+DOM+XSLT непонятное поведение.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru