HTML::TreeBuilder::XPathのfindvalue
関数は、クエリで見つかった値の連結を返します。xpath
なぜこれを行うのですか?また、値の連結はどのように誰にとっても役立つのでしょうか?
HTML::TreeBuilder::XPathのfindvalue
関数は、クエリで見つかった値の連結を返します。xpath
なぜこれを行うのですか?また、値の連結はどのように誰にとっても役立つのでしょうか?
なぜこれを行うのですか?
を呼び出すとfindvalue
、単一のスカラー値が要求されます。複数の一致がある場合は、何らかの方法でそれらを 1 つの値に結合する必要があります。
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
複数の一致がある場合は (plural) を使用する必要があります。