2011-09-19 3 views
1

나는 다음과 같은 스크립트를 사용하고 있습니다 :XML :: Simple이 URL과 작동하지 않는 것 같습니다. 이 올바른지?

#!/usr/local/bin/perl -wT 

use strict; 
use warnings; 

print "Content-type: text/html\n\n"; 
print "xml reader"; 

# use module 
use XML::Simple; 
use Data::Dumper; 

#print Dumper (XML::Simple->new()->XMLin()); 

을 그리고 내가 지금 내 CGI-빈에서 xml 파일을 이동 이름을 변경하는 경우 xml.xml

라는 내 xml 파일에 읽고 것 그것을 사용하여 참조 :

#print Dumper (XML::Simple->new()->XMLin("../resource.xml")); 

그것은 여전히 ​​작동합니다.

print Dumper (XML::Simple->new()->XMLin("http://digitalessence.net/resource.xml")); 

내가 함께하고 HTTP없이 시도 : : 지금 시도하고 URL을 사용하는 경우

대신 스크립트는 아무 것도 반환하지 않습니다 // www가 및 다른 모든 종류의 방법이없는 이 일을하지만 아무것도 반환하지 않습니다.

내가 바보 같은 일을했거나 원격 URL을로드하지 않았습니까?

감사합니다.

답변

7

XML::SimpleXMLin() 메서드는 URL에서 XML을 가져 오는 것을 지원하지 않습니다. XMLin()을 적용하기 전에 파일이나 Perl 스칼라 변수에 XML을 개별적으로 가져와야합니다. 이는 XML::Simple 설명서에서 분명합니다.

+0

아, 그냥 문서에서 이것을 발견 한 :. XML에 "이름은 문자로 시작해야 나머지 문자는 글자, 숫자, 하이픈 (-), 밑줄 (_) 또는 전체 정지 (.) 일 수 있으며, 요소 이름에 콜론 (:)을 하나만 포함 할 수도 있지만 네임 스페이스 (XML :: Simple은 SAX Parser와 팀을 만들 때 네임 스페이스에서만 유용하게 사용할 수 있습니다. 그러나 36pt 빨간색 글꼴로 된 URL을 사용할 수 없다는 것을 알지 못했기 때문에 놓쳤습니다. –

+1

@Headley, 그 텍스트 te는'XMLout()'의 입력에 대해 이야기합니다. "XMLin()"(사용하려고하는 것)의 문서를 참조하고있었습니다 : "XML 지정자는 다음 중 하나 일 수 있습니다 : 파일 이름 [...], undef [...], XML [...] 문자열, IO :: Handle 객체 [...]. " 거기에 URL을 언급하지 않습니다. – Kusalananda

5

다음과 같이 원격 리소스를 검색 할 LWP를 사용하여 프로그램을 수정할 수 있습니다

[...] 
# use module 
use XML::Simple; 
use LWP; 
use Data::Dumper; 

my $ua = LWP::UserAgent->new; 
my $req = HTTP::Request->new(GET => "http://digitalessence.net/resource.xml"); 
my $res = $ua->request($req); 

print Dumper (XML::Simple->new()->XMLin($res->content));