Jsoup将每个文本保存为textnode,包括元素之间的\r\n内容。我想要选择页面上的所有真实文本,并选择它的父文本以删除该父文本中的每一个文本。
我现在有这个:
document.select("*:containsOwn(\n)").remove();
for(int i = 1; i < document.size(); i++){
if(document.get(i).hasText()){
List<Element> removableElements = document.get(i).parent().getAllElements();
for (Element e1 : removableElements) {
e1.remove();
}
}
}
它不会删除包含\n的所有textnodes,所以它会尝试删除正文,因为这是第一个包含textnodes的元素。
我只想选择所有带有文本的元素,并做element.parent().children().remove();
document.select("*:contains( )");
也没有按照我想要的方式工作。
这个问题与这个问题有关但又不相同。
编辑:
输入:
<div>
<ul>
<li>some menu item</li>
<li>some menu item</li>
<li>some menu item</li>
</ul>
</div>
<div>
<h3>Tile of some text</h3>
<p></p>
<p>some text</p>
<ul>
<li>some other text</li>
<li>some other text</li>
<li>some other text</li>
</ul>
</div>
输出:
<li>some menu item</li>
<li>some menu item</li>
<li>some menu item</li>
<h3>Tile of some text</h3>
<p></p>
<p>some text</p>
<li>some other text</li>
<li>some other text</li>
<li>some other text</li>
空p标记作为预期输出的一部分的特殊情况(即使它与“包含实际文本”的规则相矛盾)需要特殊的解析。对于更复杂的文档/在输出中允许更多的空文本级元素的解决方案,将需要额外的if语句来处理这些元素(比较第一个if语句):
String htmlString = "<div><ul><li>some menu item</li><li>some menu item</li><li>some menu item</li></ul></div><div><h3>Tile of some text</h3><p></p><p>some text</p><ul><li>some other text</li><li>some other text</li><li>some other text</li></ul></div>";
Document doc = Jsoup.parse(htmlString);
for (Element element : doc.getAllElements()) {
if(element.nodeName().equals("p") && element.childNodes().size()==0){
System.out.println(element.toString());
}
else if(element.childNodes().size()>0 && element.childNode(0).nodeName().equals("#text")){
System.out.println(element.toString());
}
}
输出:
<li>some menu item</li>
<li>some menu item</li>
<li>some menu item</li>
<h3>Tile of some text</h3>
<p></p>
<p>some text</p>
<li>some other text</li>
<li>some other text</li>
<li>some other text</li>
问题内容: 我刚开始使用Selenium Webdriver,就立即遇到了一个问题,涉及要尝试选择/单击的所有按钮,这些按钮都没有ID并共享同一类。 所以我想知道如何通过它们包含的唯一文本来选择它们。 我可能正在考虑使用CSS选择器,但是我不确定如何告诉它寻找特定文本以选择元素。 我目前所拥有的是: 到目前为止非常基本。 我有CssSelector的地方,不确定是否要说选择包含文本“ xyz”的“
问题内容: 我将通过jsoup连接到一个url并获取它的所有内容,但问题是,如果我选择喜欢, 它返回一个元素,但是我想获取页面中的所有元素,例如,一个一个地迭代它们, 如果我选择使用body,我会在一行中得到结果,例如, 相反,我想选择所有元素并逐个迭代并产生如下结果: 使用jsoup可以吗? 谢谢, 卡尔提克 问题答案: 您可以使用选择器选择文档的所有元素,然后使用分别获取每个元素的文本。
我正在做一个项目,我只对页面布局感兴趣,对文本不感兴趣。我现在很难摆脱文本级别的每一个元素。例如: 我想在文本级别上去掉ul,li,p和h3元素,但保留div和带有菜单项的列表,因为这是页面布局的一部分。如何使用JSOUP实现这一点? 我一直试图通过document.select()和.remove()这些元素来实现这一点,但是select函数并不是为这种非标准查询而设置的。 编辑:我想得到的最终
本文向大家介绍Jsoup 使用CSS选择器选择元素,包括了Jsoup 使用CSS选择器选择元素的使用技巧和注意事项,需要的朋友参考一下 示例 您可以在此处找到支持的选择器的详细概述。
问题内容: 我想使用JSoup从文档中选择所有注释。我想做这样的事情: 我已经试过了: } 但是在日食“不兼容的条件操作数类型元素和注释”中发生以下错误。 干杯, 问题答案: 由于您需要应用到节点对象,而不是元素,因此:
所以,假设我在这里有这个HTML块:(这是Java JSOUP(顺便说一下)) 现在我有一个元素列表(作为elements类型),我想选择这些元素,但只选择那些在img标记的alt=“”部分中具有“vegetarian”属性的元素。 现在我可以根据是否是素食主义者来选择,例如 meals.select(“img[alt=fegetarian]”) 但这只将实际的img标记作为元素返回,从而丢失了对