输出InnerHTML Perl LibXML

时间:2016-10-19 14:48:46

标签: html perl xpath

请参阅下面的MWE

use XML::LibXML;
my $content = "<tr>
                <td class='title'>Synonym(s)</td>
                <td>Automobile<br/>Car<br/></td>
                </tr>";

my $parser = XML::LibXML->new({suppress_errors=>1, suppress_warnings=>1,     recover=>2});
my $document = $parser->parse_html_string($content);
my @node = $document->findnodes('//td[@class="title" and text()="Synonym(s)"]/following-sibling::td');
print $node[0]->toString();

输出是: <td>Automobile<br/>Car<br/></td>

但我只需要&#34;内部&#34;内容: Automobile<br/>Car<br/>

我如何更改xPath,还是需要不同的LibXML方法。

谢谢你, 托比亚斯

1 个答案:

答案 0 :(得分:3)

在XML :: LibXML中没有内置方法可以做到这一点。更改xpath不会有帮助。该xpath为您提供了td个元素的列表。如果您在所有符合当前xpath的td元素中获取内容,那么您最终会得到一长串内容,而无法辨别第一个td内容的位置{{ 1}}结束,第二个td开始。

相反,您需要通过将td元素的all children转换为字符串来构建它。

print join '', map { $_->toString } $node[0]->childNodes;

输出:

Automobile<br/>Car<br/>