2

xi:includeXML ファイルのノードの href リンクで環境変数を使用したいと考えています。現在、Perl XInclude パーサーは変数をサポートしておらず、絶対パスのみをサポートしています。これを克服できる方法はありますか?たとえば、私のxi:includeノードは次のようになります。

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

によって参照されるパス$GLOBAL_ROOTは、別の設定をロードすることによって後で変更できますが、パーサーはファイルのそれぞれの場所を検索できるはずです。

4

2 に答える 2

2

シンボリック リンク (相対リンクまたは絶対リンク) を使用しないのはなぜですか? またはユーザーのホーム ディレクトリの場所 (~/.xml)?

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

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

<xi:include href="~/.XML/alternative.xml">
于 2010-01-15T15:08:25.163 に答える
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

于 2010-01-15T14:58:37.913 に答える