我想在xi:include
XML 文件节点的 href 链接中使用环境变量。目前 Perl XInclude 解析器不支持任何变量,只支持绝对路径。有没有办法可以克服这个问题?例如,我的xi:include
节点将如下所示:
<xi:include href="$GLOBAL_ROOT/alternative.xml">
稍后可以通过加载不同的设置来更改引用的路径,$GLOBAL_ROOT
并且解析器仍然应该能够在文件的相应位置查找。
我想在xi:include
XML 文件节点的 href 链接中使用环境变量。目前 Perl XInclude 解析器不支持任何变量,只支持绝对路径。有没有办法可以克服这个问题?例如,我的xi:include
节点将如下所示:
<xi:include href="$GLOBAL_ROOT/alternative.xml">
稍后可以通过加载不同的设置来更改引用的路径,$GLOBAL_ROOT
并且解析器仍然应该能够在文件的相应位置查找。
为什么不使用符号链接(相对或绝对)?还是用户主目录位置 (~/.xml)?
<xi:include href="XML/alternative.xml">
<xi:include href="/XML/alternative.xml">
<xi:include href="~/.XML/alternative.xml">
您在专门研究私有方法时处于不稳定的状态(按照惯例用前导下划线表示),但作者可以通过提供更多钩子来提供帮助。假设您正在使用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
参数。