Xpoint
   [напомнить пароль]

XML::LibXSLT - относительно чего считается базовый URI

Метки: [без меток]
[удл]
2013-07-25 23:20:03 [обр] Principal AG(3/11)[досье]
Всем доброго в.с.
Пытаюсь в основном шаблоне через <xsl:include href="myTemplate.xsl"/> подключить дополнительный шаблон.
Оба шаблона (и основной и дополнительный) лежат рядышком, в одной директории.
Но при $xslt->parse_stylesheet($doc) вылетает фатальная ошибка:
[Thu Jul 25 21:01:57 2013] [error] [client 127.0.0.1] compilation error: file unknown-000032897832 element include
[Thu Jul 25 21:01:57 2013] [error] [client 127.0.0.1] xsl:include : unable to load myTemplate.xsl
Пытался задавать href относительно корня DOCUMENT_ROOT - не помогло, всё равно не видит.
Возможно нужно как-то определить xml:base или что-то типа того ...
Подскажите плз., кто сталкивался.
Заранее спасибо.
спустя 1 час 30 минут [обр] Евгений Седов aka KPbIC(9/187)[досье]
сообщение промодерировано
Относительный путь считается от основного шаблона. Ваша конструкция должна работать. Приведите минимальный проблемный код.
спустя 13 часов [обр] Principal AG(3/11)[досье]

Кажется удалось локализовать источник ошибки!
Вот в таком виде:

my $style_doc = $parser->parse_file($fname);
#my $style_str = $style_doc->toString(0);
#$style_doc = $parser->parse_string($style_str);
my $stylesheet = $xslt->parse_stylesheet($style_doc);
my $results = $stylesheet->transform($source);
print q{<b>XML:</b><xmp>} . $stylesheet->output_string($results) . q{</xmp>};

всё прекрасно работает.
Но если раскомментировать 2-3 строки, то появляется описанная выше ошибка. Т.е. шаблон полученный из строки теряет привязку к файловой системе и соответственно в нём перестают работать относительные ссылки.
Отсюда вопрос:
Можно ли в объект класса XML::LibXML::Document, полученный из строки или файлового дескриптора вернуть (или назначить) "базовый URI".

спустя 58 минут [обр] Principal AG(3/11)[досье]

Ну вот, правильно заданный вопрос - это уже половина ответа!
Базовый URI можно задать парсеру.
Т.е. если 3-й строкой поставить:

$parser->base_uri($fname);

то прекрасно будет работать шаблон и пропущенный через строку.

З.Ы. Конструкция:

my $parser = XML::LibXML->new('XML_LIBXML_BASE_URI' => $fname);

тоже прекрасно работает.

Тема исчерпана.

Powered by POEM™ Engine Copyright © 2002-2005