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] ;
相反。