关于 java:如何使用 Jsoup 选择具有空类的元素

How to select Element with empty class using Jsoup

我想用 class="" 选择元素,比如

1
2
<li class="">
</li>

我用过

1
Elements topProductSecNav = topNavWrapper.select("li[class=]");

但我得到了 java.lang.IllegalArgumentException: String must not be empty 异常。


使用这个:Elements topProductSecNav=topNavWrapper.select(li[class=""]");
请参阅此处的工作示例。


我会使用正则表达式 css 选择器 li[class~=^$]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
String html="<li class="">
</li>
"

           +"<li class= >
</li>
"

           +"<li class >
</li>
"

           +"<li >
</li>
"

           +"<li class="test">
</li>
"
;
Document doc = Jsoup.parse(html,"");

Elements liWithClassButNoName = doc.select("li[class~=^$]");

for (Element li:liWithClassButNoName){
    System.out.println("li ="+ li);
}

导致此输出(仅前 3 个 lis 匹配):

1
2
3
4
5
6
7
8
li = <li class="">
</li>

li = <li class>
</li>

li = <li class>
</li>

解释:

~= 表示正则表达式和
^$ 搜索空字符串

Jsoup 将删除第二个示例 li 元素 <li class= > 中的 =。正则表达式也显然匹配一个不存在的字符串,因此如果您需要过滤掉这些,您可能需要使用@TDG 给出的解决方案。