Как упоминалось в этом вопросе, я пытаюсь преобразовать входной XML-документ с помощью Perl и libXSLT. Однако, когда я пытаюсь запустить тот же сценарий Perl в OS X с небольшим добавлением следующего в моем файле xsl под
<xsl:variable name="current-year">
<xsl:value-of select="date:year()"/>
</xsl:variable>
Я получаю следующую ошибку.
xmlXPathCompOpEval: function year not found
Unregistered function
xmlXPathCompiledEval: evaluation failed
runtime error: file trans.xsl line 24 element value-of
XPath evaluation returned no result.
Заголовок моего файла XSLT имеет следующее
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xslt"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:exsl="http://exslt.org/common"
xmlns:date="http://exslt.org/dates-and-times"
extension-element-prefixes="exsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" media-type="text/xml"/>
Запуск Perl -v
приводит меня к подписке
This is perl, v5.8.8 built for darwin-thread-multi-2level
Copyright 1987-2006, Larry Wall....
и запуск uname -a
приводит меня к следующему
Darwin machine-maci 15.3.0 Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 x86_64
Почему появляется эта ошибка? Я думал, что поставщик OS X уже имеет расширения exsl для своего libXSLT. Расширения exsl еще не поддерживаются?
ОБНОВЛЕНИЕ
Я немного подправил свой пример и получил вывод как Vendor:-libxslt, как было предложено в комментариях ниже.
<xsl:value-of select="system-property('xsl:vendor')"/>
? - person michael.hor257k   schedule 06.09.2016exsl:document
(ниже которой я используюsystem-property
согласно вашему предложению)runtime error: file trans.xsl line 30 element document xsltApplySequenceConstructor: failed to find extension document
- person Recker   schedule 06.09.2016exsl:document
(или что-то еще) в этот тест. В любом случае, я предлагаю вам отредактировать свой вопрос и предоставить полные пошаговые инструкции, как воспроизвести вашу проблему - см.: минимальный воспроизводимый пример. - person michael.hor257k   schedule 06.09.2016Vendor :- libxslt
- person Recker   schedule 06.09.2016perl -MXML::LibXSLT -le 'print $XML::LibXSLT::VERSION'
иperl -MXML::LibXSLT -le 'print XML::LibXSLT::HAVE_EXSLT()'
? - person nwellnhof   schedule 06.09.20161.62
иCan't locate auto/XML/LibXSLT/HAVE_EXSLT.al in @INC (@INC contains: ....all the Perl directories... .) at -e line 1
соответственно. - person Recker   schedule 06.09.2016XML::LibXSLT
от 2006 года. Возможно, она не была скомпилирована с поддержкой EXSLT, но трудно сказать, потому что функция HAVE_EXSLT была добавлена позже. - person nwellnhof   schedule 06.09.2016