Java Jsoup查找具有特定文本的元素
我想使用JSoup从HTML中选择一个具有特定文本的元素。html是Java Jsoup查找具有特定文本的元素,java,html,parsing,jsoup,Java,Html,Parsing,Jsoup,我想使用JSoup从HTML中选择一个具有特定文本的元素。html是 <td style="vertical-align:bottom;text-align:center;width:15%"> <div style="background-color:#FFDD93;font-size:10px;margin:5px auto 0px auto;text-align:left;" class="genbg"><span class="corners-top-sub
<td style="vertical-align:bottom;text-align:center;width:15%">
<div style="background-color:#FFDD93;font-size:10px;margin:5px auto 0px auto;text-align:left;" class="genbg"><span class="corners-top-subtab"><span></span></span>
<div><b>Pantry/Catering</b>
<div>
<div style="color:#00700B;">✓ Pantry Car Avbl
<br />✓ Catering Avbl</div>
</div>
<div>
<div><span>Dinner is served after departure from NZM on 1st day.;</span>...
<br /><a style="font-size:10px;color:Red;" onClick="expandPost($(this).parent());" href="javascript:void(0);">Read more...</a>
</div>
<div style="display:none;">Dinner :2 chapati, rice, dal and chicken curry (NV) and paneer curry in veg &Ice cream.; Breakfast:2 bread slices with jam and butter. ; Omlet of 2 eggs (Non veg),vada and sambar(veg)..; coffee & lime juice</div>
</div>
</div><span class="corners-bottom-subtab"><span></span></span>
</div>
但这似乎不起作用。如何使用Jsoup获取此元素?当我运行代码时,它选择外部
div
,而我假设您要查找的是内部div
。表示它选择“包含指定文本的元素”。在这个简单的html中:
<div><div><b>Pantry/Catering</b></div></div>
由于jsoup从外部进行匹配,因此匹配总是按该顺序进行。因此.first()
始终与外部div
匹配。要提取内部div
,可以使用.get(1)
完整提取内部div
:
doc.select("div:contains(Pantry/Catering)").get(1)
嗯。我明白了。不得不做一些类似的事情
doc.select(“b:contains(配餐室/餐饮)”).first().parent().children().get(1.text()代码>
谢谢你的帮助 这也应该为您完成以下工作:
doc.selectFirst("div:containsOwn(Pantry/Catering)").text();
说明:
selectFirst(选择器)-有助于避免使用select()。first()
containsOwn(文本)-返回直接包含指定文本的元素的伪选择器。文本必须出现在找到的元素中,而不是与contains(文本)相反的任何子元素中
来源:我正试图了解这一点,但如果div不是第一个内部div,会发生什么?@KickButtowski结果中元素的顺序与它们的开始标记在文本中出现的顺序相同。否则,如果您事先不知道它的位置,您可以迭代选择结果以查找元素或匹配更具体的内容(例如b:contains(Pantry/Catering)
),然后使用.parent()
)返回。谢谢。为什么这个代码没有给我我想要的?doc=Jsoup.parse(输入,空);元素el=文件选择(“div”);if(el.contains(“Pantry/Catering”){System.out.println(el.text();}包含中的元素
来自集合
界面,用于测试它是否包含特定的元素
,而不是检查文本内容。还要确保你理解和@Spectre之间的区别——我不太明白。我尝试了doc.select(“div:contains(配餐室/餐饮)”)。得到(1)
,它仍然对我无效。顺便说一句,在我发布的代码中只有一个“食品储藏室/餐饮”
。那么,它如何为您匹配两次呢?
doc.select("div:contains(Pantry/Catering)").get(1)
doc.selectFirst("div:containsOwn(Pantry/Catering)").text();