Я работаю над кодом ниже, чтобы позволить пользовательским агентам HTTP, которые не могут выполнять преобразования XSL, просматривать ресурсы на моем сервере. Я озадачен, потому что результатом transformToXML является false
, но результатом libxml_get_errors()
является пустой массив. Как видите, код выводит идентификатор версии LibXSLT, и у меня возникает проблема с WinVista с версией 1.1.24. Не является ли libxml_get_errors()
неправильной функцией для получения ошибок от объекта XSLTProcessor?
Если вы заинтересованы в документах XML, вы можете получить их из http://bobberinteractive.com/index.xhtml и ... / stylesheets / layout.xsl
<?php
//redirect browsers that can handle the source files.
if (strpos ( $_SERVER ['HTTP_ACCEPT'], 'application/xhtml+xml' )) {
header ( "HTTP/1.1 301 Moved Permanently" );
header ( "Location: http://" . $_SERVER ['SERVER_NAME'] . "/index.xhtml" );
header ( "Content-Type: text/text" );
echo "\nYour browser is capable of processing the <a href='/index.xhtml'> site contents on its own.";
die ();
}
//start by checking the template
$baseDir = dirname ( __FILE__ );
$xslDoc = new DOMDocument ();
if (! $xslDoc->load ( $baseDir . '/stylesheets/layout.xsl' )) {
header ( "HTTP/1.1 500 Server Error" );
header ( "Content-Type: text/plain" );
echo "\n Can't load " . $baseDir . '/stylesheets/layout.xsl';
die ();
}
//resolve the requested resource (browsers that need transformation will request the resource without the suffix)
$uri = $_SERVER ['REQUEST_URI'];
$len = strlen ( $uri );
if (1 >= $len || '/' == substr ( $uri, $len - 1 )) {
$fileName = $baseDir . "/index.xhtml"; // use 'default' document if pathname ends in '/'
} else {
$fileName = $baseDir . (1 load ( $fileName )) {
header ( "HTTP/1.1 500 Server Error" );
echo "\n Can't load " . $fileName;
die ();
}
// now start the XSL template processing
$proc = new XSLTProcessor ();
$proc->importStylesheet ( $xslDoc );
$doc = $proc->transformToXML ( $xmlDoc );
if (false === $doc) {
header ( "HTTP/1.1 500 Server Error" );
header ( "Content-Type: text/plain" );
echo "\n";
// HERE is where it gets strange: the value of $doc is false and libxml_get_errors returns 0 entries.
display_xml_errors ( libxml_get_errors() );
die ();
}
header ( "Content-Type: text/html" );
echo "\n";
echo $doc;
function display_xml_errors($errors) {
echo count ( $errors ) . " Error(s) from LibXSLT " . LIBXSLT_DOTTED_VERSION;
for($i = 0; $i level) {
case LIBXML_ERR_WARNING :
$return .= "Warning $error->code: ";
break;
case LIBXML_ERR_ERROR :
$return .= "Error $error->code: ";
break;
case LIBXML_ERR_FATAL :
$return .= "Fatal Error $error->code: ";
break;
}
$return .= trim ( $error->message ) . "\n Line: $error->line" . "\n Column: $error->column";
if ($error->file) {
$return .= "\n File: $error->file";
}
echo "$return\n\n--------------------------------------------\n\n";
}
}