perl – 按其第一个子元素的名称选择HTML元素
发布时间:2020-12-16 06:23:38 所属栏目:大数据 来源:网络整理
导读:我需要找到所有 div的id属性的值.具有 span的元素儿童. 例如,给定这个HTML div id="a1" span xa1 /span /divdiv id="a2" p.../p span xa2 /span /divdiv id="a3" p span xa3 /span /p /divdiv id="a4" p.../p /divdiv id="b1" /div span xb1 /spandiv id="b2
我需要找到所有< div>的id属性的值.具有< span>的元素儿童.
例如,给定这个HTML <div id="a1"> <span> xa1 </span> </div> <div id="a2"> <p>...</p> <span> xa2 </span> </div> <div id="a3"> <p> <span> xa3 </span> </p> </div> <div id="a4"> <p>...</p> </div> <div id="b1"> </div> <span> xb1 </span> <div id="b2"> </div> <p> <span> xb1 </span> </p> <div id="b3"> </div> <p>.</p> <span> xb3 </span> 我需要得到:a1,仅此而已. 因为CSS选择器没有类似正向前瞻的东西,所以我需要逐步搜索HTML,但我不知道如何. 如何修改下一个源,只获得a1? use 5.014; use warnings; use Mojo::DOM; my $html = do {local $/; <DATA>}; my $dom = Mojo::DOM->new($html); for my $div ($dom->find('div')->each) { #say "DIV[[$div]]"; my @spans = $div->find('div > span')->each; #found a1 and a2 ;( say $div->attr('id') if (@spans == 1); } __DATA__ <div id="a1"> <span> xa1 </span> </div> <div id="a2"> <p>...</p> <span> xa2 </span> </div> <div id="a3"> <p> <span> xa3 </span> </p> </div> <div id="a4"> <p>...</p> </div> <div id="b1"> </div> <span> xb1 </span> <div id="b2"> </div> <p> <span> xb1 </span> </p> <div id="b3"> </div> <p>.</p> <span> xb3 </span> <p id="p1"> <span> xp1 </span> </p> <p id="p2"> <p>...</p> <span> xp2 </span> </p> <p id="p3"> <p> <span> xp3 </span> </p> </p> <p id="p4"> <p>...</p> </p> 解决方法
您可以使用css样式选择器和Mojo :: DOM的
parent 方法以稍微迂回的方式获取您正在寻找的元素:
use strict; use warnings; use feature ":5.10"; use Mojo::DOM; my $html = do{ local $/; <DATA>}; my $dom = Mojo::DOM->new($html); # searches for div elements with spans as the first child for my $div ( $dom->find('div > span:first-child')->parent->each ) { say "id: " . $div->attr('id') if $div->attr('id'); } __DATA__ <div id="a1"> <span> xa1 </span> </div> <div id="a2"> <p>...</p> <span> xa2 </span> </div> <div id="a3"> <p> <span> xa3 </span> </p> </div> <div id="a4"> <p>...</p> </div> <div id="b1"> </div> <span> xb1 </span> <div id="b2"> </div> <p> <span> xb1 </span> </p> <div id="b3"> </div> <p>.</p> <span> xb3 </span> <p id="p1"> <span> xp1 </span> </p> <p id="p2"> <p>...</p> <span> xp2 </span> </p> <p id="p3"> <p> <span> xp3 </span> </p> </p> <p id="p4"> <p>...</p> </p> 输出: id: a1 或者,如果您知道它只是您想要的第一个这样的div,那么以下内容将起作用: say "id: " . $dom->at('div > span:first-child')->parent->attr('id'); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |