5

我正在使用HTML::TreeBuilder来解析一些 HTML。

您可以在“ look_down ”例程中指定多个类吗?

例如,在使用 HTML 搜索时 -

for ( $tree->look_down( 'class' => 'postbody'))

'postprofile'我还要在同一个循环中搜索一个额外的类。

有没有办法做到这一点而不必使用新的 -for ( $tree->look_down( 'class' => 'postprofile' ))

因为这会带回两组结果,而我只想要一组合并的结果。

我尝试使用 -for ( $tree->look_down( 'class' => 'postbody||postprofile')) 但是这不起作用,

先感谢您。

4

2 回答 2

9

尝试使用模式而不是字符串,即

$tree->look_down( 'class' => qr/^(?:postbody|postprofile)$/)
于 2011-07-13T13:05:13.770 回答
1

Jambo,我并不是要粗鲁,但请阅读手册。我添加了指向您问题的链接。

我将假设您没有阅读文档,因为您无法找到它们。让我们解决这个问题:

如何找到您需要的文档

在线的:

  • search.cpan.org 是用于搜索 CPAN 模块及其文档的主要网站。那里可以找到很多东西。

  • perldoc.perl.org 在线提供了几个最新版本的 Perl 的完整发布文档。

命令行:

  • perldoc显示了一个目录,其中列出了您可以仔细阅读的文档的不同部分。

  • perldoc -f function 是一种快速搜索 perlfunc 并仅查看有关一个函数的信息的方法。这是一个超级方便的快速参考。

  • perldoc Module::Name::Here将向您显示模块的文档。

  • perldoc perlpod是阅读文档部分的示例,在本例中是关于 POD 格式的文章。

我读什么?

这一切都很好,但你怎么知道去哪里看?我的意思是,我正在使用这个名为“look_down”的东西。文档在哪里?

在这种情况下,您可以看到“look_down”总是这样调用$somevar->look_down(blarg)。找出$somevar从哪里来。它是一个什么样的对象?最坏的情况,您发现它是其他调用的结果,现在您必须找到该调用的文档并查看返回的内容。但是步骤是一样的。递归推进。最终你会得到my $tree = HTML::TreeBuilder->new_from_content()或类似的东西。现在您可以阅读new_from_contentHTML::TreeBuilder 中的文档。嘿,我们得到了一个 HTML::Tree 对象,它是 HTML::Element 的子类!所以我们检查两个类。哇,look_down 在 HTML::Element 中。

如果您有从其他模块导入的例程,这会有点棘手。希望您的代码的作者足够体贴,能够明确列出他的例程的来源:

use Some::Module qw( useful_sub  confusing_sub );

这意味着useful_subconfusing_sub来自Some::Module;

如果你不走运,你的作者只写了use Some::Module;这意味着你得到了所有的默认导出。这意味着您需要阅读文档以了解导入的内容。

为了可维护性,您可以通过始终准确指定从函数导入的例程来减少这种噩梦。如果你想导入NOTHING,你可以指定为: use Some::Module ();

在寻找简单的子名称时,记住它们可能是实际函数会有所帮助。所以不要忘记搜索 perldoc。

最后,我希望你觉得这很有用。R-ing TFM 是一种非常强大的技术,学习如何查找相关文档是释放力量的隐藏技能。Perl 有大量的文档要翻阅,当你不知道从哪里看时,它可能会令人生畏。

于 2011-07-13T17:00:04.993 回答