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 |
|