0

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

为什么要这样做,这些值的串联如何对任何人有用?

4

2 回答 2

2

为什么这样做?

当您调用 时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如果可以有多个匹配项,则应该使用 (复数)。

于 2016-07-12T07:34:08.073 回答
1

利用

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

反而。

于 2017-12-25T22:57:56.263 回答