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
文档中很清楚。
答
您可以修改你的程序如下,使用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));
啊,在doc刚看准了这一点:在XML “名称必须以字母开头的剩余字符可以是字母,数字,连字符( - ),下划线(_)或完全停止符(。)。也可以在元素名称中包含一个冒号(:),但这只能在使用名称空间时使用(XML :: Simple与SAX Parser合作时只能有效地处理命名空间)但是看不到它说我无法使用36pt的红色字体的URL,所以我错过了。感谢您的帮助 –
@Hedley,你现在的文字te讨论了对'XMLout()'的输入。我指的是'XMLin()'的文档(这是你正在尝试使用的):“XML说明符可以是下列之一:文件名[...],undef [...]一串XML [...],一个IO :: Handle对象[...]。“在那里没有提及URL。 – Kusalananda