gpt4 book ai didi

html - 如何使用 HTML::TreeBuilder 查找直接后代?

转载 作者:搜寻专家 更新时间:2023-10-31 02:25:29 25 4
gpt4 key购买 nike

假设我有一个这样的 HTML 树:

div
`- ul
`- li (*)
`- li (*)
`- li (*)
`- li (*)
`- ul
`- li
`- li
`- li

如何选择 <li>标有 (*) 的元素?他们是第一个 <ul> 的直系后代元素。

这是我找到第一个 <ul> 的方法元素:

my $ul = $div->look_down(_tag => 'ul');

现在我有 $ul ,但是当我做这样的事情时:

my @li_elements = $ul->look_down(_tag => 'li');

它还会找到 <li>深埋在 HTML 树中的元素。

我如何才能找到 <li>元素是第一个 <ul> 的直接后代元素?我有数量不详的。 (我不能像示例中那样只选择前 4 个)。

最佳答案

您可以获得 HTML::Element 的所有 child 使用 content_list 的对象方法,所以第一个<ul>的所有子节点文档中的元素将是

use HTML::TreeBuilder;

my $tree = HTML::TreeBuilder->new_from_file('my.html');

my @items = $tree->look_down(_tag => 'ul')->content_list;

但使用 HTML::TreeBuilder::XPath 更具表现力, 它可以让你找到所有 <li> <ul> 的 children <div> 的 children 文档中任意位置的元素,像这样

use HTML::TreeBuilder::XPath;

my $tree = HTML::TreeBuilder->new_from_file('my.html');

my @items = $tree->findnodes('//div/ul/li')->get_nodelist;

关于html - 如何使用 HTML::TreeBuilder 查找直接后代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11488132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com