Есть ли способ предварительного просмотра нескольких таблиц стилей XSLT, работающих с одним и тем же XML? - PullRequest
2 голосов
/ 04 августа 2011

Я создаю несколько таблиц стилей XSLT (например, «hotels.xsl», «tickets.xsl», «tickets.xsl» и т. Д.), Которые будут использовать тот же XML-документ, что и источник (называемый «schedule.xml»).в этом случае) и вывод HTML.Последний процесс, использующий XML и XSLT, позаботится о себе, но я ищу лучший способ сделать предварительный просмотр при работе с ними.Прямо сейчас я храню копию файла schedule.xml в том же каталоге, что и рабочие документы XSLT, и использую инструкцию обработки для предварительного просмотра одной таблицы стилей в веб-браузере.Например, используя:

<?xml-stylesheet type="text/xsl" href="hotels.xsl"?>

Конечно, это означает, что мне нужно либо изменить ссылку на таблицу стилей, либо сделать несколько копий документа XML, каждый из которых содержит собственную ссылку на таблицу стилей, чтобы увидеть вывод HTML вбраузер.Делать что-либо из этого не очень сложно, но я бы хотел избежать их, если это возможно, чтобы ускорить процесс.

Таким образом, возникает вопрос:

Если не написать небольшой сценарий, который поможет с процессом, есть ли способ просмотреть вывод HTML в браузере для каждой таблицы стилей без измененияссылка или создание нескольких копий XML?

Ответы [ 2 ]

2 голосов
/ 04 августа 2011
  1. Используйте среду разработки XML, такую ​​как oXygen , чтобы настроить несколько «сценариев преобразования», каждый из которых настроен на отправку выходных данных в браузер для предварительного просмотра. Вы можете переключаться между сценариями, переключаясь между буферами таблиц стилей.
  2. Используйте среду разработки XML, такую ​​как Cocoon или Calabash (возможно, даже Servlex ), чтобы настроить конвейер для каждой таблицы стилей. В Cocoon и Servlex различные конвейеры могут быть выбраны с помощью отдельных URL.

Оба требуют некоторого времени на настройку, но могут стоить того, в зависимости от того, насколько интенсивна ваша разработка / тестирование. С другой стороны, ваша идея создания нескольких копий XML-документа довольно проста в настройке и быстрой в использовании. Пока документ меняется не очень часто.

1 голос
/ 08 августа 2011

В итоге я написал PHP-файл для запуска на моем локальном веб-сервере. Это шаблон с одной переменной, которую необходимо изменить, чтобы определить путь к файлу XML для преобразования. Когда он вызывается, он доставляет этот XML с соответствующей инструкцией обработки таблицы стилей.

Что мне нравится в этом подходе:

  • Настройка новых преобразований для тестирования выполняется быстро и просто. Просто скопируйте файл php, переименуйте его и при необходимости измените путь к XML.
  • Тестирование обновленных данных XML легко. По сравнению с несколькими копиями исходного XML-документа, этот подход использует один файл. Когда в него вносятся обновления, они видны при каждом преобразовании.
  • Проверка изменений может быть выполнена очень быстро с помощью горячих клавиш. Быстрые Cmd + S, Cmd + Tab, Cmd + R сохраняют таблицу стилей в редакторе, переходят в браузер и перезагружаются так быстро, что это едва заметно.
  • Поскольку путь к документу XML определен в коде, я могу использовать переменные в нем при необходимости. Например, передача уникального идентификатора для извлечения файла с соответствующим значением в его имени.
  • Никакого другого программного обеспечения для установки, так как на моей машине уже есть apache с запущенным и запущенным php.

Код шаблона для файла php:

<?php

// Set the path to the XML file you want to use.
$xmlPath = "example.xml";

////////////////////////////////////////////////////////////////////////////////
// You shouldn't have be mess with any of this.

// Let the browser know XML is on the way. 
header('Content-type:  text/xml');

// get the basename of the current file
$fileBaseName = basename($_SERVER["SCRIPT_NAME"], ".php");

// setup the stylesheet to use
$xsltStylesheet = sprintf('<?xml-stylesheet type="text/xsl" href="%s.xsl"?>', $fileBaseName);

// pull in the contents of the source XML file. 
$xmlData = file_get_contents($xmlPath);

// split the file data looking for processing instructions
$splitArray = explode("?>", $xmlData);

// Pop the main data off the end of the array
$mainData = array_pop($splitArray);

// If there were no headers, push a default onto the split array
if(count($splitArray) == 0) {
    array_push($splitArray, '<?xml version="1.0" encoding="UTF-8"?>');
    array_push($splitArray, $xsltStylesheet);
}

// otherwise check the headers to see if there is already a stylesheet
else {

    // set a flag to watch for a stylesheet
    $hasStylesheet = 0;

    // loop thru the headers
    foreach ($splitArray as &$splitItem) {
        // add the closing string back in.
        $splitItem .= '?>';

        // See if it's a stylesheet call
        if(strrpos($splitItem, '<?xml-stylesheet')) {

            // update the flag to show you hit a stylesheet
            $hasStylesheet = 1;

            // change the href call for the style sheet. 
            $splitItem = preg_replace('/\shref="[^"]*"/', ' href="' . $fileBaseName . '.xsl"', $splitItem);
        }
    }

    // If you didn't find a stylesheet instruction, add it.
    if(!$hasStylesheet) {
        array_push($splitArray, $xsltStylesheet);
    }

}

// reassemble the data
$mainData = implode("\n", $splitArray) . $mainData;

echo $mainData;

Чтобы использовать это,

  1. Создать таблицу стилей в каталоге, доступном через веб-сервер.
  2. Сделайте копию кода PHP в том же каталоге с тем же базовым именем файла, что и таблица стилей. Например, если таблица стилей - «test-example.xsl», файл php будет «test-example.php».
  3. Обновите переменную "$ xmlPath" в файле php, чтобы она указала на XML, который будет использоваться для тестирования.
  4. Откройте страницу php через веб-браузер (например, http://localhost/test-example.php) и посмотрите результаты преобразования.

В своем текущем состоянии этот код должен быть достаточно надежным. Он добавит вызовы таблиц стилей в файлы XML, у которых их еще нет, и изменит вызовы таблиц стилей на те, которые имеют. Как и во всем, его можно построить еще больше, но он охватывает то, что мне нужно на данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...