Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 使用Mojo::DOM进行解析_Perl_Mojolicious_Mojo - Fatal编程技术网

Perl 使用Mojo::DOM进行解析

Perl 使用Mojo::DOM进行解析,perl,mojolicious,mojo,Perl,Mojolicious,Mojo,我正在使用Mojo::UserAgent->new获取一些XML,其格式如下: <row> <td> content1 </td> <td> content2 </td> <td> content3 </td> </row> <row> <td> content4 </td> <td> content5 </td> <td> co

我正在使用Mojo::UserAgent->new获取一些XML,其格式如下:

<row>
<td> content1 </td>
<td> content2 </td>
<td> content3 </td>
</row>
<row>
<td> content4 </td>
<td> content5 </td>
<td> content6 </td>
</row>
下面是我正在使用的查询,它可以得到不同的结果

 $ua->get($url)->res->dom->at->(row)->children->each(sub {print "$_\t"})

当然,这是绝对可能的,在幕后工作也不难

代码

一些评论

为返回的集合的每个元素计算代码引用。 在本例中,使用给定方法名的返回值返回Mojo::Collection对象。这只是一种处理简单事物的奇特方式。 自动修剪元素内容。 将Mojo::Collection对象的所有元素连接在一起,在本例中是一行的所有td元素。 您的代码甚至不会编译,但使用也不会工作,因为它只返回第一个匹配的DOM元素,而不是全部。您希望迭代所有行。

当然,这是绝对可能的,而且在幕后工作也不难

代码

一些评论

为返回的集合的每个元素计算代码引用。 在本例中,使用给定方法名的返回值返回Mojo::Collection对象。这只是一种处理简单事物的奇特方式。 自动修剪元素内容。 将Mojo::Collection对象的所有元素连接在一起,在本例中是一行的所有td元素。 您的代码甚至不会编译,但使用也不会工作,因为它只返回第一个匹配的DOM元素,而不是全部。您希望迭代所有行。

请确保发布真实代码。你发布的那行甚至没有编译。请参阅my以了解使用at不适用于您的原因。喂?你还活着吗;请确保发布真实代码。你发布的那行甚至没有编译。请参阅my以了解使用at不适用于您的原因。喂?你还活着吗;
 $ua->get($url)->res->dom->at->(row)->children->each(sub {print "$_\t"})
# replace this line by your existing $ua->get($url)->res->dom code
my $dom = Mojo::DOM->new(do { local $/ = undef; <DATA> });

# pretty-print rows
$dom->find('row')->each(sub {
    my $row = shift;
    say $row->children->pluck('text')->join(', ');
});
__DATA__
<row>
<td> content1 </td>
<td> content2 </td>
<td> content3 </td>
</row>
<row>
<td> content4 </td>
<td> content5 </td>
<td> content6 </td>
</row>
content1, content2, content3
content4, content5, content6