如何在xi中使用环境变量:包含XML文件?

时间:2010-01-15 07:39:10

标签: xml perl environment-variables xinclude

我想在XML文件的xi:include节点的href链接中使用环境变量。目前,Perl XInclude解析器不支持任何变量,只支持绝对路径。有没有一种方法可以克服这个问题? 例如,我的xi:include节点将如下所示:

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

$GLOBAL_ROOT引用的路径可以稍后通过加载不同的设置进行更改,但解析器应该能够在文件的相应位置查找。

2 个答案:

答案 0 :(得分:2)

为什么不使用符号链接(相对或绝对)?或用户主目录位置(〜/ .xml)?

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

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

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

答案 1 :(得分:1)

你处于不稳定的地方,专门使用私有方法(由带有前导下划线的约定表示),但作者可以通过提供更多钩子来提供帮助。假设您正在使用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参数传递给工厂。