Как использовать переменные окружения в xi: include файла XML? - PullRequest
2 голосов
/ 15 января 2010

Я хотел бы использовать переменную окружения в ссылке href узла xi:include файла XML. В настоящее время анализатор Perl XInclude не поддерживает никакие переменные, а только абсолютные пути. Есть ли способ, где это можно преодолеть? например, мой xi:include узел будет выглядеть так:

<xi:include href="$GLOBAL_ROOT/alternative.xml">

Путь, указанный как $GLOBAL_ROOT, можно изменить позже, загрузив другую настройку, и все же анализатор сможет найти файл в соответствующем месте.

Ответы [ 2 ]

2 голосов
/ 15 января 2010

Почему бы не использовать символическую ссылку (относительную или абсолютную)? или местоположение домашнего каталога пользователя (~ / .xml)?

<xi:include href="XML/alternative.xml">

<xi:include href="/XML/alternative.xml">

<xi:include href="~/.XML/alternative.xml">
1 голос
/ 15 января 2010

Вы находитесь на шатком основании, специализирующемся на частном методе (указанном соглашением с начальным подчеркиванием), но автор может помочь, предоставив больше хуков. Предполагая, что вы используете XML::Filter::XInclude:

package MyXInclude::ExpandEnvironmentVars;

use warnings;
use strict;

our @ISA = qw/ XML::Filter::XInclude /;

sub _include_xml_document {
  my($self,$url) = @_;

  # expand environment variables if present
  $url =~ s/\$(\w+)/$ENV{$1}/g;

  $self->SUPER::_include_xml_document($url);
}

Затем передайте фабрике экземпляр MyXInclude::ExpandEnvironmentVars в качестве параметра Handler.

...