2010-01-15 2 views
2

XML 파일의 xi:include 노드의 href 링크에서 환경 변수를 사용하고 싶습니다. 현재 Perl XInclude 파서는 절대 경로를 제외한 모든 변수를 지원하지 않습니다. 이것이 극복 될 수있는 방법이 있습니까? 예를 들어, 내 xi:include 노드는 다음과 같이 표시됩니다XML 파일의 xi : include에 환경 변수를 사용하려면 어떻게해야합니까?

$GLOBAL_ROOT에 의해 언급 된 경로는 파일의 각각의 위치에서 찾아 볼 수 있어야 다른 설정과 여전히 파서를로드하여 나중에 변경할 수 있습니다
<xi:include href="$GLOBAL_ROOT/alternative.xml"> 

.

+3

"perl XInclude parser"에 대해 이야기하고 있습니까? – mirod

답변

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); 
} 

는 그 다음 Handler 매개 변수로 공장을 MyXInclude::ExpandEnvironmentVars의 인스턴스를 전달합니다.

2

왜 기호 링크 (상대 또는 절대)를 사용하지 않습니까? 또는 사용자 홈 디렉토리 위치 (~/.xml)?

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

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

<xi:include href="~/.XML/alternative.xml"> 
관련 문제