【问题标题】:XML::Simple doesn't seem to work with a URL. Is this correct?XML::Simple 似乎不适用于 URL。它是否正确?
【发布时间】:2011-09-19 12:09:45
【问题描述】:

我正在使用以下脚本:

#!/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"));

它仍然有效。

如果我现在尝试使用 url,脚本不会返回任何内容:

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

我尝试过使用和不使用 http://、没有 www 以及各种不同的方法,但它没有返回任何内容。

我在这里做了什么傻事还是只是不加载远程网址?

谢谢。

【问题讨论】:

    标签: xml perl xml-simple


    【解决方案1】:

    XML::Simple 中的 XMLin() 方法不支持从 URL 获取 XML。在应用XMLin() 之前,您需要单独将XML 提取到文件中或直接提取到Perl 标量变量中。从XML::Simple 文档中可以清楚地看到这一点。

    【讨论】:

    • 啊,刚刚在文档中发现了这一点:“XML 中的名称必须以字母开头。其余字符可能是字母、数字、连字符 (-)、下划线 (_) 或句号 ( .). 也允许在元素名称中包含一个冒号 (:),但这只能在使用命名空间时使用(XML::Simple 只有在与 SAX 解析器组合时才能有效地使用命名空间)。但不能没有看到它说我不能使用 36pt 红色字体的 url,所以我错过了。谢谢你的帮助。
    • @Hedley,你引用的文字谈到了XMLout() 的输入。我指的是XMLin() 的文档(这是您尝试使用的):“XML 说明符可以是以下之一:文件名 [...]、undef [...]、字符串XML [...],一个 IO::Handle 对象 [...]。”里面没有提到网址。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 2023-04-06
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多