Perl 使用Mojo::DOM进行解析
我正在使用Mojo::UserAgent->new获取一些XML,其格式如下: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
<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