php 4.3.2+Sablot 0.98 - проблемы xslt преобразования

si

Administrator
php 4.3.2+Sablot 0.98 - проблемы xslt преобразования

после перехода на новые версии PHP и саблот имеем не работающий код:

PHP:
<?

// Allocate a new XSLT processor
$xh = xslt_create() or die('Can not do; xslt_create()');

xslt_set_log($xh, true);
xslt_set_log($xh, '/tmp/sablot.log');

$arguments = array(
    '/_xml' => file_get_contents('./data/2.xml'),
    '/_xsl' => file_get_contents('./data/2.xsl'),
);

// Process the document
if ( $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments) ) {
    print "SUCCESS, test.xml was transformed by test.xsl into result.xml";
    print ", result.xml has the following contents\n<br>\n";
    print "<pre>\n";
    echo $result;
    print "</pre>\n";
}
else {
    print "Sorry, test.xml could not be transformed by test.xsl into";
    print "  result.xml the reason is that " . xslt_error($xh) . " and the ";
    print "error code is " . xslt_errno($xh);
}

xslt_free($xh);
?>
методом не научного тыка установил что если 'arg:/_xsl' заменить на имя файла с xsl то все работает:

PHP:
<?

// Allocate a new XSLT processor
$xh = xslt_create() or die('Can not do; xslt_create()');

xslt_set_log($xh, true);
xslt_set_log($xh, '/tmp/sablot.log');

$arguments = array(
    '/_xml' => file_get_contents('./data/2.xml'),
    '/_xsl' => file_get_contents('./data/2.xsl'),
);

// Process the document
if ( $result = xslt_process($xh, 'arg:/_xml', './data/2.xsl', NULL, $arguments) ) {
    print "SUCCESS, test.xml was transformed by test.xsl into result.xml";
    print ", result.xml has the following contents\n<br>\n";
    print "<pre>\n";
    echo $result;
    print "</pre>\n";
}
else {
    print "Sorry, test.xml could not be transformed by test.xsl into";
    print "  result.xml the reason is that " . xslt_error($xh) . " and the ";
    print "error code is " . xslt_errno($xh);
}

xslt_free($xh);
?>
куски лога:
----- не рабоающий пример ---
Sablotron Message on line none, level log: Parsing 'arg:/_xsl'...
Sablotron Message on line none, level log: Parse done in 0.009 seconds
Sablotron Message on line none, level log: Parsing 'arg:/_xml'...
Sablotron Message on line none, level log: Parse done in 0.011 seconds
Sablotron Message on line none, level log: Executing stylesheet 'arg:/_xsl'...
Sablotron Message on line none, level log: Parsing 'file:/...2.php'...

----- рабоающий пример ---
Sablotron Message on line none, level log: Parsing 'file:/...data/2.xsl'...
Sablotron Message on line none, level log: Parse done in 0.009 seconds
Sablotron Message on line none, level log: Parsing 'arg:/_xml'...
Sablotron Message on line none, level log: Parse done in 0.011 seconds
Sablotron Message on line none, level log: Executing stylesheet 'file:/...data/2.xsl'.
Sablotron Message on line none, level log: Parsing 'file:/...data/2.xsl'...
Sablotron Message on line none, level log: Parse done in 0.005 seconds
Sablotron Message on line none, level log: Execution done in 0.077 seconds

как видите он почемуто пытается чтото сделать с php файлом.

какие есть предложения, мысли ?

так же замечено что это зависит от самого шаблона.

Тестовые скрипты: http://si.infonet.ee/sablot.rar
 

si

Administrator
оказалось что проблема в этом:
<xsl:variable name="sort-images" select="document('')/xsl:stylesheet/ni:sort-images"/>

лечение:
xslt_set_base($xh, "arg:/_xsl");
 

[DAN]

Старожил PHPClub
У меня на винде с установленным php-4.3.2 саблотрон работает нормально.
Хотя подобные глюки происходили с другими версиями как самого модуля, так и sablotron'a.
 

[DAN]

Старожил PHPClub
Странные дела. Скачал твои примеры, попробовал скормить разным парсерам.
MSXML съел и даже не подавился. Никаких ошибок и предупреждений.
libxslt (DOMXML module) подавился немного (Warning: process(): xsltApplyOneTemplate: if was not compiled in ...) но все-таки документ преобразовал.
А вот sablotron напрочь отказывается :\
Warning: Sablotron error on line 34: XML parser error 3: no element found in ... На этом и заканчивает свою работу.

Причем в обоих случаях ошибки вылезают в строке, где происходит трансформация.
Могу предположить (т.к. не копался), что что-то не так в шаблоне.
Хотя MSXML говорит, что и данные, и шаблон well-formed.
 
Сверху