HTML::TreeBuilder::XPath中的findvalue
函数返回查询找到的任何值的串联。xpath
为什么要这样做,这些值的串联如何对任何人有用?
HTML::TreeBuilder::XPath中的findvalue
函数返回查询找到的任何值的串联。xpath
为什么要这样做,这些值的串联如何对任何人有用?
为什么这样做?
当您调用 时findvalue
,您请求的是单个标量值。如果有多个匹配项,则必须以某种方式将它们组合成一个值。
从HTML::TreeBuilder::XPath的文档中:
查找值($路径)
...如果路径返回 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] ;
反而。