Прямо сейчас я преобразовываю XML-документ с таблицей стилей XSLT с помощью JavaScript (в основанном на Wordpress веб-сайте). Это хорошо работает в Firefox и Chrome, но не в IE. Плюс, если бы JavaScript не включен, ничто не обнаружилось бы.
Так, моя цель состоит в том, чтобы сделать преобразование XML/XSLT к XHTML на сервере, не клиент, предпочтительно с помощью PHP.
Я попробовал много различных Сценариев PHP, которые другие люди записали (я - новичок), но я не могу заставить их работать. Я включал самый простой Сценарий PHP, который я нашел ниже. Я знаю, что динамический filepath мог бы быть проблемой, но я не знаю лучший способ определить местоположение XML и файлов XSLT.
Когда я использую ниже сценария, я получаю ошибку: Ошибка анализа: синтаксическая ошибка, неожиданный T_STRING в/home/alan/public_html/wp-content/themes/Stacked/page-renting.php на строке 42
Альтернативные решения приветствовались бы также.
<?php
$xml = new DOMDocument();
$xml->load('<?php bloginfo('template_directory'); ?>/rentals/works.xml');
$xsl = new DOMDocument;
$xsl->load('<?php bloginfo('template_directory'); ?>/rentals/works.xsl');
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
?>
Вам просто нужно заменить этот бит PHP в правильном контексте, таким образом:
$xml = new DOMDocument;
$xml->load(get_bloginfo('template_directory') . '/rentals/works.xml');
$xsl = new DOMDocument;
$xsl->load(get_bloginfo('template_directory') . '/rentals/works.xsl');
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
Решил.
Я попробовал вышеупомянутые предложения Джоша и Рубенса, но документы xml и xsl все еще не удалось найти. Но, исходя из идеи Джоша о другом способе доступа к каталогу шаблонов, я немного погуглил и нашел это решение:
Вот окончательный PHP-скрипт, который я использовал для преобразования XML с XSLT на сервере с помощью PHP. Спасибо всем, кто помог.
<?php
$xml = new DOMDocument;
$xml->load('./wp-content/themes/Stacked/rentals/WORKS.xml');
$xsl = new DOMDocument;
$xsl->load('./wp-content/themes/Stacked/rentals/WORKS.xsl');
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
?>
Две ключевые вещи, которые заставляют его работать:
Использование периода и пути к файлу в качестве альтернативы обычному методу wordpress, который я использовал раньше.
Чувствительность к регистру. Имена моих файлов были написаны с заглавной буквы (не мудро, я знаю). Так как файловые пути обычно не чувствительны к регистру, я об этом не подумал, но оказалось, что в данном случае (когда внутри PHP-скрипта?) использование правильного регистра для BOTH имя темы (Stacked) и имя файла (WORKS.xml, WORKS.xsl) необходимо для того, чтобы заставить его найти файл корректно.
Вы должны удалить эту информацию Bloginfo; Этот метод нагрузки получает ваши имена файлов XML / XSLT.
$xml->load('/rentals/works.xml');
$xsl->load('/rentals/works.xsl');
Конечно, они должны указывать правильный путь вашего файлов XML / XSLT