XML :: Simple似乎不适用于URL。它是否正确?

问题描述:

我使用下面的脚本: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?

谢谢。

中的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

您可以修改你的程序如下,使用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));