【问题标题】:jsoup css selector: escape question markjsoup css 选择器:转义问号
【发布时间】:2014-10-22 08:26:54
【问题描述】:

给定一个标签,其类包含问号

<h2 class="?class-text ">mark-text should be blue</h2>

如何使用 jsoup 选择器进行选择?

我试过了

doc.select("h2.\\?class-text")
doc.select("h2.?class-text")
doc.select("h2[class=?class-text]")
doc.select("h2[class=\\?class-text]")

但这些都不起作用。

这个有效

doc.select("h2[class*=class-text]")

但我想选择完全匹配。

JSFiddle for this

更新:

doc.select("h2[class~=\\?class-text]")

工作。但是没有正则表达式有解决方案吗?

【问题讨论】:

  • 那不是正则表达式。事实上,这是一个无效的选择器,因为选择器中间有一个杂散的.
  • 另外,你不能在 JSFiddle 中运行 Java 代码,所以这个 fiddle 是毫无意义的。该小提琴中的 CSS 选择器相当于您的 Java 代码中的 doc.select("h2.\\?class-text"),根据您的说法,这不起作用;然而,小提琴奏效了。
  • 糟糕,h2 和 [class=] 之间的点放错了。我已经编辑了帖子。根据jsoup.org/cookbook/extracting-data/selector-syntax,它是正则表达式:“[attr~=regex]: 属性值与正则表达式匹配的元素”
  • 哇,看起来 jsoup 采用了现有的选择器并重新调整了它的用途。在标准 CSS 中,它不是正则表达式,也没有基于正则表达式的选择器。

标签: java css-selectors jsoup


【解决方案1】:

如果您想使用select,那么您作为参数传递的内容最终将被视为正则表达式。您传递的字符串实际上是在Stringmatches 方法中传递的(这是对其实际作用的过度简化,但您明白了)。 Check this answer 。如果您不想使用正则表达式,请使用:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class Main {

    public static void main(String[] args) {
        try {
            String str = "<div><h2 class=\"?class-text \">mark-text should be blue</h2></div>"; 
            Document doc = Jsoup.parse(str);

            Elements el = doc.getElementsByClass("?class-text");
            System.out.println(el);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【讨论】:

  • 我不知道所有选择器都在里面使用正则表达式。然后我将使用 ~= 选择器,因为有时我需要用一个选择器选择多个类
猜你喜欢
  • 2013-06-08
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 2012-08-02
  • 2016-03-31
相关资源
最近更新 更多