2011-09-19 53 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()); 

,它會在我的叫xml.xml

XML文件中讀取如果現在移動xml文件了我的cgi-bin中,更改其名稱和參考它使用:

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

它仍然有效。

如果我現在嘗試使用一個網址,而不是腳本不返回任何內容:

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

我曾嘗試與和沒有http://,沒有www和各種不同的方式這樣做,但它不會返回任何東西。

我在這裏做了些什麼傻事,還是隻是不加載遠程URL?

謝謝。

回答

7

中的XMLin()方法不支持從URL中獲取XML。在應用XMLin()之前,您需要分別將XML讀取到文件或直接讀取到Perl標量變量中。這從XML::Simple文檔中很清楚。

+0

啊,在doc剛看準了這一點:在XML 「名稱必須以字母開頭的剩餘字符可以是字母,數字,連字符( - ),下劃線(_)或完全停止符(。)。也可以在元素名稱中包含一個冒號(:),但這隻能在使用名稱空間時使用(XML :: Simple與SAX Parser合作時只能有效地處理命名空間)但是看不到它說我無法使用36pt的紅色字體的URL,所以我錯過了。感謝您的幫助 –

+1

@Hedley,你現在的文字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));