2010-01-15 145 views
2

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

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

通过$GLOBAL_ROOT所指的路径可以通过加载不同的设置,但仍会解析器应该能够查找在各自的文件位置后改。

+3

哪个“perl XInclude parser”你在说什么? – mirod 2010-01-15 13:13:43

回答

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参数。

2

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

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

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

<xi:include href="~/.XML/alternative.xml"> 
相关问题