HTML::TreeBuilder::XPath findvalue 返回值的串联


HTML::

TreeBuilder::XPath 中的 findvalue 函数返回由xpath查询找到的任何值的串联。

它为什么要这样做,值的串联对任何人都有用吗?

为什么要这样做?

调用 findvalue 时,您正在请求单个标量值。如果有多个匹配项,则必须以某种方式将它们组合成单个值。

来自 HTML::TreeBuilder::XPath 的文档:

查找值 ($path)

。如果路径返回 NodeSet,则会自动调用$nodeset->xpath_to_literal(因此返回 Tree::XPathEngine::Literal)。

从 Tree::XPathEngine::NodeSet 的文档来看:

xpath_to_literal()

返回列表中所有节点的所有字符串值的串联。

另一种方法是返回 Tree::XPathEngine::NodeSet 对象,以便用户可以自己循环访问结果,但 findvalues 方法已经返回了一个列表。

<小时 />

值的串联怎么可能对任何人有用?

例如:

use strict;
use warnings 'all';
use 5.010;
use HTML::TreeBuilder::XPath;
my $content = do { local $/; <DATA> };
my $tree = HTML::TreeBuilder::XPath->new_from_content($content);
say $tree->findvalue('//p');
__DATA__
<p>HTML is just text.</p>
<p>It can still make sense without the markup.</p>

输出:

HTML is just text.It can still make sense without the markup.

不过,通常情况下,获取匹配项列表并遍历它们比进行哑连接更有意义,因此如果可以有多个匹配项,则应使用findvalues(复数)。

使用

( $tree->findvalues('//p') )[0] ;

相反。

相关内容

  • 没有找到相关文章

最新更新