HTML::TreeBuilder::XPath中的findvalue
函数返回xpath
查询找到的任何值的串联。
为什么会这样做,以及如何将值的连接对任何人都有用?
答案 0 :(得分:2)
为什么会这样做?
当您致电findvalue
时,您正在请求单个标量值。如果有多个匹配项,则必须将它们合并为单个值以某种方式。
来自HTML::TreeBuilder::XPath的文档:
findvalue($ 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
(复数)。
答案 1 :(得分:0)
使用
( $tree->findvalues('//p') )[0] ;
代替。