Как преобразовать XML с помощью XSLT с помощью PHP в Wordpress

Прямо сейчас я преобразовываю XML-документ с помощью таблицы стилей XSLT, используя Javascript (на веб-сайте на основе Wordpress). Это отлично работает в Firefox и Chrome, но не в IE. Кроме того, если Javascript не включен, ничего не появится.

Итак, моя цель — выполнить преобразование XML/XSLT в XHTML на сервере, а не на клиенте, желательно с использованием PHP.

Я пробовал много разных PHP-скриптов, написанных другими людьми (я новичок), но не могу заставить их работать. Я включил простейший PHP-скрипт, который нашел ниже. Я знаю, что динамический путь к файлу может быть проблемой, но я не знаю лучшего способа найти файлы 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);

?>

person Alan    schedule 24.01.2010    source источник


Ответы (4)


Вам просто нужно заменить этот фрагмент 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);
person Josh Davis    schedule 24.01.2010
comment
Это должно работать, если вместо этого вы используете get_bloginfo, поскольку функция bloginfo печатает, а не возвращает переменную. - person Richard M; 25.01.2010
comment
О верно. Я не знаю функций WordPress, но теперь это объясняет, почему первоначальный постер пытался выполнить там этот код. - person Josh Davis; 25.01.2010

Решил это.

Я попробовал приведенные выше предложения Джоша и Рубенса, но документы 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);

?>

Две ключевые вещи, которые заставляют его работать:

  1. Использование точки и пути к файлу в качестве альтернативы обычному методу WordPress, который я использовал раньше.

  2. Чувствительность к регистру. Имена моих файлов были написаны с большой буквы (знаю, это неразумно). Поскольку пути к файлам обычно не чувствительны к регистру, я не думал об этом, но оказывается, что в этом случае (когда внутри PHP-скрипта?) использование правильного регистра для ОБОИХ имени темы (Stacked) и имени файла ( WORKS.xml, WORKS.xsl) необходим для правильного нахождения файла.

person Alan    schedule 24.01.2010

Другой способ — вообще не использовать XSLT, а использовать плагин, который преобразует XML с помощью простой разметки. См. этот плагин.

person Gustav S    schedule 23.01.2012

Вы должны удалить эту информацию о блоге; этот метод загрузки получает ваши имена файлов XML/XSLT.

$xml->load('/rentals/works.xml');
$xsl->load('/rentals/works.xsl');

Конечно, они должны указывать правильный путь к файлам XML/XSLT.

person Rubens Farias    schedule 24.01.2010