HTML :: TreeBuilder :: XPath findvalue返回值的连接

问题描述 投票:0回答:2

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

为什么这样做,以及如何将值的连接对任何人都有用?

string perl xpath concatenation html-treebuilder
2个回答
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(复数)。


0
投票

使用

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

代替。

© www.soinside.com 2019 - 2024. All rights reserved.