Используйте библиотеку функций без использования ‹import› или ‹include›

У меня есть несколько XSL-преобразований с общим кодом. Общий код состоит из функций, созданных с расширением функции exslt. Теперь я хочу передать эти функции в библиотеку, чтобы сделать их более удобными в сопровождении.

Преобразования компилируются в исполняемый файл как ресурсы и считываются из памяти, когда они необходимы. Я хотел бы сохранить это и использовать тот же механизм для библиотеки. Причина в том, что исполняемый файл всегда будет знать, где они находятся, и конфигурация пути не требуется.
Теперь мой вопрос: как мне импортировать внешнюю таблицу стилей, которая задана как строка, и не доступен в виде файла?

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

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

Среда: libxml2, libxslt (xslt 1.0), расширение exslt, Linux.

Спасибо,
Йост


person Jost    schedule 06.12.2012    source источник
comment
Вам нужно прочитать о преобразователях XML, доступных на вашей платформе.   -  person Dimitre Novatchev    schedule 07.12.2012
comment
В мире Java это делается с помощью xsl:include с фиктивным URI и предоставлением URIResolver в качестве процедуры обратного вызова, задачей которой является преобразование URI в фактический ресурс. Я не знаю, предоставляет ли libxslt аналогичный механизм.   -  person Michael Kay    schedule 07.12.2012


Ответы (1)


Спасибо Дмитрию и Майклу за то, что подтолкнули меня в правильном направлении.

URIResolver-Mechanism называется «каталогом» в libxml и работает напрямую (для простых случаев использования):

  1. Включить "libxml/catalog.h"
  2. Инициализируйте системный каталог, используя функцию «xmlInitializeCatalog».
  3. Добавьте сопоставления разрешения с помощью «xmlCatalogAdd»
  4. Очистка с помощью "xmlCatalogCleanup"

Спасибо за подсказки,
Йост

person Jost    schedule 12.12.2012