|
|
|
| Есть 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, вроде как, тоже есть библиотека для этого, но без поллитры самому не разобраться :( | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: 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" />
|
| |
|
|
|
|
|
|
|
для: Lelik
(07.05.2008 в 12:04)
| | Во, спасибо! Все работает :) Только в последней строке надо указать windows-1251, а не utf-8 | |
|
|
|
|
|
|
|
для: aexb
(07.05.2008 в 13:30)
| | это я сбросил участок своего кода. я utf-8 использую :) | |
|
|
|