请参阅下面的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方法。
谢谢你, 托比亚斯
答案 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/>