Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: xml -> xslt -> php -> html
 
 автор: aexb   (06.05.2008 в 15:14)   письмо автору
 
 

Есть XML-документ index.xml:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<?xml
-stylesheet type='text/xsl' href='transform.xsl'?>
<root>
    <animals>
        <dogs>
            <dog>
                <dogName>Шарик</dogName>
                <dogWeight caption="кг">18</dogWeight>
                <dogColor>рыжий с черными подпалинами</dogColor>
            </dog>
            <dog>
                <dogName>Тузик</dogName>
                <dogWeight caption="кг">10</dogWeight>
                <dogColor>белый с черными пятнами</dogColor>
            </dog>
            <dog>
                <dogName>Бобик</dogName>
                <dogWeight caption="кг">2</dogWeight>
                <dogColor>бело-серый</dogColor>
            </dog>
            <dog>
                <dogName>Трезор</dogName>
                <dogWeight caption="кг">25</dogWeight>
                <dogColor>черный</dogColor>
            </dog>
        </dogs>
    </animals>
</root>

и XSLT-схема его преобразования transform.xsl:
<?xml version="1.0" encoding="WINDOWS-1251" ?>
<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <html>
    <head>
    <title>My dogs</title>
    </head>
    <body>
    <table border="1">
        <tr bgcolor="#CCCCCC">
            <td align="center"><strong>Кличка</strong></td>
            <td align="center"><strong>Вес</strong></td>
            <td align="center"><strong>Цвет</strong></td>
        </tr>
        <xsl:for-each select="root/animals/dogs/dog">
        <tr bgcolor="#F5F5F5">
            <td><xsl:value-of select="dogName"/></td>
            <td align="right">
                <xsl:value-of select="dogWeight"/> <xsl:value-of select="dogWeight/@caption"/>
            </td>
            <td><xsl:value-of select="dogColor"/></td>
        </tr>
        </xsl:for-each>
    </table>
    </body>
    </html>
</xsl:template>
</xsl:stylesheet>

Трансформация идет отлично, все работает, но если посмотреть исходник документа в браузере, то мы видим тот же XML, а выдаваемый браузером на HTML. Собственно, вопрос: как получить HTML в соурсе? На сайте Парсера вычитал, что Парсер умеет делать серверное преобразование в нормальный HTML. В PHP, вроде как, тоже есть библиотека для этого, но без поллитры самому не разобраться :(

   
 
 автор: Lelik   (06.05.2008 в 16:42)   письмо автору
 
   для: aexb   (06.05.2008 в 15:14)
 

делается так:

<?php
$xsl_proc 
= new XSLTProcessor();
$xsl = new DOMDocument;
    
$template 'common.xslt';
$xsl->load($template);
$xsl_proc->importStyleSheet($xsl);
print 
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
$document $xsl_proc->transformToXML($page->buildPage());//в этом месте я получаю xml не в текстовом виде, а cозданный через ДОМ документ
print $document;
?>

   
 
 автор: aexb   (07.05.2008 в 11:48)   письмо автору
 
   для: Lelik   (06.05.2008 в 16:42)
 

Получилось, но кодировка по умолчанию ставится UTF-8 (автоматом прописывается в мета-тэге). Как ее поменять на 1251? Вот скрипт страницы index.php (xml и xslt такие как в первом посте - ничего не трогал):
<?php
$xml 
= new DOMDocument;
$xml->load('index.xml');

$xsl = new DOMDocument;
$xsl->load('transform.xsl');

$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); 

echo 
$proc->transformToXML($xml);
?>

   
 
 автор: Lelik   (07.05.2008 в 12:04)   письмо автору
 
   для: aexb   (07.05.2008 в 11:48)
 

наверное так

<?php
header
("Content-type: text/html; charset=windows-1251");
$xml = new DOMDocument;
$xml->load('index.xml');

$xsl = new DOMDocument;
$xsl->load('transform.xsl');

$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); 

echo 
$proc->transformToXML($xml);
?> 

+ указать в xml && xslt файлах нужную кодировку

и еще в xslt добавить такое

<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" omit-xml-declaration="yes" cdata-section-elements="node" encoding="utf-8" indent="yes" />

   
 
 автор: aexb   (07.05.2008 в 13:30)   письмо автору
 
   для: Lelik   (07.05.2008 в 12:04)
 

Во, спасибо! Все работает :) Только в последней строке надо указать windows-1251, а не utf-8

   
 
 автор: Lelik   (07.05.2008 в 13:43)   письмо автору
 
   для: aexb   (07.05.2008 в 13:30)
 

это я сбросил участок своего кода. я utf-8 использую :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования