我有以下html,使用Jsoup我试图提取p部分中没有任何属性的文本(文本"Some text 2"而不是"Some text 1").
<div id="intro">
<h1 class="some class">
<p id="some_id">
Some text 1
</p>
<p>
Some text 2
</p>
</div>
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下Jsoup表达式:
div[id=intro] > p:not(:has(@*))
Run Code Online (Sandbox Code Playgroud)
但它不起作用.谢谢你的帮助.
我认为您可以使用JSOUP CSS 选择器 p:not([^]),它将选择任何与具有以任何内容开头的属性不匹配的 p 。
String html = "<div id=\"intro\">"
+ "<h1 class=\"some class\">"
+ "<p id=\"some_id\">"
+ "Some text 1"
+ "</p>"
+ "<p name=\"some_name\">"
+ "Some text A"
+ "</p>"
+ "<p data>"
+ "Some text B"
+ "</p>"
+"<p>"
+ "Some text 2"
+"</p>"
+"</div> ";
Document doc = Jsoup.parse(html);
Elements els = doc.select("p:not([^])");
for (Element el:els){
System.out.println(el.text());
}
Run Code Online (Sandbox Code Playgroud)
上面的例子只会打印出
Some text 2
Run Code Online (Sandbox Code Playgroud)
因为只有这个p元素没有属性。
请注意,选择器p[^]将选择所有具有属性的 p 元素。