Perl LibXML解析来自LWP HTTPS数据的缩放器

时间:2014-03-21 21:21:40

标签: xml perl https lwp-useragent xml-libxml

我正在尝试从HTTPS网站获取文字。我已经使用LWP完成了这项工作,但我需要解析信息,因为它是XML。我想我已经找到了如何使用XML::LibXML执行我想要的操作,但我无法使用它来访问LWP::UserAgent中的数据。

这是我的代码:

#! usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use open qw(:std :utf8);
use 5.014;
use IO::Socket::SSL qw();
use XML::LibXML;

BEGIN {
    $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
    $ENV{HTTPS_DEBUG} = 1;
}

my $ua = LWP::UserAgent->new(ssl_opts => {
    SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE,
    verify_hostname => 0, 
});

my $response = $ua->get('https:<mywebsite>');

my $t = '';

if ( $response->is_success ) {
    $t = $response->decoded_content;
}
else {
    die $response->status_line;
}


my $parser = XML::->new();
my $xmldoc = $parser->parse_file($t);

print $xmldoc;

我收到错误: No such file or directory,我尝试的每个解析器方法都出错,并且LibXML解析器字符串方法不起作用,因为我的数据是多行。我需要一种方法来欺骗XML::LibXML思考$t是一个文件或文件句柄,或者找到另一种方法来解析我的数据。如果可以帮助我,我不想实际创建文件。

作为参考,这是我从HTTPS网站获得的XML数据,上面的代码存储在$t中:

<?xml version="1.0" ?>
<resultset>
<table name="PROFILE">
 <column name="ID" type="String"/>
 <column name="VERSION" type="String"/>
 <column name="NAME" type="String"/>
 <column name="DESCRIPTION" type="String"/>
<data>
<r><c>0</c><c>1.0</c><c>Default profile</c><c>Default profile</c></r>
<r><c>2</c><c>1.2</c><c>Custom 2</c><c></c></r>
<r><c>3</c><c>6.0</c><c>Custom 3</c><c></c></r>
<r><c>1</c><c>1.15</c><c> For Compare</c><c>The built in profile for compare.</c></r>
<r><c>4</c><c>1.3</c><c>Custom 4</c><c> </c></r>
<r><c>6</c><c>11.0</c><c>Custom 6</c><c>Please only make approved changes.</c></r>
</data>
</table>
</resultset>

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:3)

只需阅读XML::LibXML的文档,您就会看到调用它的替代形式。

use XML::LibXML;
my $dom = XML::LibXML->load_xml(string => $t);

答案 1 :(得分:2)

如果您查看XML::LibXML::Parser的文档,您会看到location的{​​{1}}选项可以是文件路径或URL。因此,根本不需要直接涉及load_xml;你可以写

LWP