我正在尝试从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>
感谢任何帮助,谢谢。
答案 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