我想提取HTML页面中特定表单元格中存在的一些文本。
现在,问题是,此单元格存在于没有ID /名称的表标签内。
我正在使用HTML :: TreeBuilder :: XPath来使用XPATH表达式提取值。
HTML内容如下所示:
<table border="0">
<tr>
<td>Some Text</td>
<td>The Text I want comes here</td>
</tr>
这是我的XPATH表达式的样子:
@nodes=$tree->findnodes(q{//table[8]/tr/td[2]/text()});
print $_->string_value."\n" foreach(@nodes); # corrected, thanks mirod.
它不显示输出。
我使用了table [8],因为它是HTML页面中的八个表标签(假设索引从1开始)。
另外,我使用了td [2],因为我想要第二个td标签之间的innerHTML。
谢谢。
最佳答案
如果在XPath查询的末尾删除text()
,会发生什么情况?我认为在td本身上调用string_value
就足够了。
同样,方法调用不会内插在字符串中,因此您需要编写print $_->string_value, "\n"
。
这将为您提供内容的文本,而不是标记。为此,您需要使用as_HTML
,并剥离外部标签(HTML :: Element中没有提供内部HTML的方法):
#!/usr/bin/perl
use strict;
use warnings;
use HTML::TreeBuilder::XPath;
my $tree= HTML::TreeBuilder::XPath->new_from_content( <DATA>);
my @nodes=$tree->findnodes(q{//table[1]/tr/td[2]});
print $_->string_value, "\n" foreach(@nodes); # text
print $_->as_HTML, "\n" foreach(@nodes); # outerHTML
__DATA__
<html>
<body>
<table border="0">
<tr>
<td>Some Text</td>
<td>The Text I want comes here with <b>nested</b> content</td>
</tr>
</body>
</html>
关于perl - 没有ID/名称的Perl HTML::Treebuilder XPATH表标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11965075/