Такой скрипт:
PHP:
<?php
//Для расчёта времени.
list($time,$ms) = explode(" ", microtime());
$first_time = $time + $ms;
//
$xml = file_get_contents('example.xml');
$xsl = file_get_contents('power.xsl');
$dom = domxml_open_mem($xml);
$xslt = domxml_xslt_stylesheet($xsl);
$final = $xslt->process($dom);
echo $xslt->result_dump_mem($final);
//----------
$arguments = array(
'/_xml' => $xml,
'/_xsl' => $xsl
);
$xh = xslt_create();
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
if ($result) {
echo $result;
} else {
echo "ERROR";
}
xslt_free($xh);
//Расчёт времени
list($time,$ms) = explode(" ", microtime());
$second_time = $time + $ms;
$loaded = $second_time - $first_time;
echo $loaded;//Время работы скрипта
?>
Соответствующие куски кода, которые выполняют трансформацию, коментировал.
XML файл размером 220кб. XSLT таблица не очень сложная
. Кусок XSLT таблицы я уже приводил выше…
Результаты такиие:
Libxslt
5,7716059684753 с
5,695081949234 с
5,6948549747467 с
5,6630082130432 с
5,6673798561096 с
6,0866010189056 с
5,6766979694366 с
<t> = 5,75 с
Sablotron
5,8141849040985
5,8878300189972
6,065929889679
5,8252441883087
5,8118641376495
5,831444978714
5,8402149677277
<t> = 5,86 c
По поводу пустых тэгов нашел вот это:
http://mail.gnome.org/archives/xslt/2003-May/msg00050.html.
Правда ничего не понял.
-~{}~ 08.01.05 18:22:
Ответ найден!
Ошибка в XSLT шаблоне:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl
utput
xmlns="http://www.w3.org/TR/xhtml1/strict"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
encoding="UTF-8"
indent="yes"
method="xml"
omit-xml-declaration="no"
version="1.0"
media-type="text/xml"
/>
Я не в том месте определял xmlns для XHTML 1.0 документа (писал в xsl:stylesheet, а надо писать в xsl
utput).
То что написано выше — создаёт валидный xhtml 1.0 документ.
Всем спасибо за внимание! Тема закрыта.