我正在使用 TreeBuilder :: XPath ,如下所示:
use strict;
use warnings;
use LWP::Simple;
use HTML::TreeBuilder::XPath;
my $url='file:///C:/Users/Rockstar/workspace/abc/globals_func.html';
my $page = get($url) or die $!;
my $p = HTML::TreeBuilder::XPath->new_from_content( $page);
my @trips= $p->findnodes( '//div[@class="contents"]');
foreach my $trip (@trips){
print $trip->as_text;
}
在HTML文件中运行后,我得到了这个输出(ALL在一行中):
ChainCtrlBuildChain():ChainController.cChainCtrlDumpChain():ChainController.cChainCtrlExit():ChainController.cChainCtrlGetBitStreamChan():ChainController.cChainCtrlInit():ChainController.c。
但我希望它们显示如下(每个值一行):
ChainCtrlBuildChain() : ChainController.c
ChainCtrlDumpChain() : ChainController.c
ChainCtrlExit() : ChainController.c
ChainCtrlGetBitStreamChan() : ChainController.c
ChainCtrlInit() : ChainController.c.
我的HTML文件(仅显示“内容”的HTML代码):
<div class="contents">
 <ul>
<li>ChainCtrlBuildChain()
: <a class="el" href="_chain_controller_8c.html#acb2c56087a2072b6445a54c17662d118">ChainController.c</a>
</li>
<li>ChainCtrlDumpChain()
: <a class="el" href="_chain_controller_8c.html#a13ed5a02bf232b115b9a58cdd13dadd7">ChainController.c</a>
</li>
<li>ChainCtrlExit()
: <a class="el" href="_chain_controller_8c.html#a9e30e46ebc5411537efe95a286e27cb4">ChainController.c</a>
</li>
<li>ChainCtrlGetBitStreamChan()
: <a class="el" href="_chain_controller_8c.html#a00faa6e64ea466d4ec57339017e57e71">ChainController.c</a>
</li>
<li>ChainCtrlInit()
: <a class="el" href="_chain_controller_8c.html#aed300a388eff2fa9c7565025982faab1">ChainController.c</a>
</li>
</ul>
</div><!-- contents -->
我错过了什么?
答案 0 :(得分:2)
您需要在print
语句中添加新行。
print $trip->as_text."\n";
或者,您可以使用say
自动执行此操作:
use feature 'say';
...
say $trip->as_text;
<强>更新强>
您正在访问div
元素,该元素会在您的数组中为您提供一个元素,其中包含ul
的每个元素。要将li
的每个元素都放入一个数组元素中,您需要执行以下操作:
use feature 'say';
...
my @trips= $p->findnodes( '//div[@class="contents"]//li');
foreach my $trip (@trips){
say $trip->as_text;
}
这将访问li
元素。