Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jsoup查找具有特定文本的元素_Java_Html_Parsing_Jsoup - Fatal编程技术网

Java Jsoup查找具有特定文本的元素

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

我想使用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-subtab"><span></span></span>
    <div><b>Pantry/Catering</b>
        <div>
            <div style="color:#00700B;">&#10003;&nbsp;Pantry Car Avbl
                <br />&#10003;&nbsp;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 &amp;Ice cream.; Breakfast:2 bread slices with jam and butter. ; Omlet of 2 eggs (Non veg),vada and sambar(veg)..; coffee &amp; 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();