Исключение: не удалось разобрать запрос: Содержит собственный (текст) - PullRequest
0 голосов
/ 13 февраля 2011

привет всем я использую jsoup в приложении java-ee для анализа html

я хочу получить первый тег, который содержит текст, и при попытке запустить следующий код я получил исключение:

org.jsoup.select.Selector$SelectorParseException: Could not parse query :containsOwn(text)
    at org.jsoup.select.Selector.findElements(Selector.java:143)
    at org.jsoup.select.Selector.select(Selector.java:90)
    at org.jsoup.select.Selector.select(Selector.java:68)
    at org.jsoup.nodes.Element.select(Element.java:162)

код:

String html = "<html><head><style type=\"text/css\"></style></head><body><div style=\"font-family:times new roman,new york,times,serif;font-size:14pt\">first text<br><div><br></div><div style=\"font-family: times new roman,new york,times,serif; font-size: 14pt;\"><br><div style=\"font-family: times new roman,new york,times,serif; font-size: 12pt;\"><font size=\"2\" face=\"Tahoma\"><hr size=\"1\"><b><span style=\"font-weight: bold;\">one:</span></b> second text<br><b><span style=\"font-weight: bold;\">two:</span></b> third text<br><b><span style=\"font-weight: bold;\">three:</span></b> fourth text<br><b><span style=\"font-weight: bold;\">five:</span></b> fifth text<br></font><br>";
        Document document = Jsoup.parse(html);
        String firstText = document.select(":containsOwn(text)").first().text();
        System.out.println(firstText);

так есть идеи?

1 Ответ

1 голос
/ 13 февраля 2011

Кстати, ваш HTML выглядит неправильно, у вас есть лишние div после first text: -

<div ...>first text<br><div><br></div>

Во-вторых, вам, вероятно, нужно использовать matchesOwn, потому что containsOwn будет искать конкретный текст, основываясь на документации .

Попробуйте это: -

String html = "<html><head><style type=\"text/css\"></style></head><body><div style=\"font-family:times new roman,new york,times,serif;font-size:14pt\">first text<br><br></div><div style=\"font-family: times new roman,new york,times,serif; font-size: 14pt;\"><br><div style=\"font-family: times new roman,new york,times,serif; font-size: 12pt;\"><font size=\"2\" face=\"Tahoma\"><hr size=\"1\"><b><span style=\"font-weight: bold;\">one:</span></b> second text<br><b><span style=\"font-weight: bold;\">two:</span></b> third text<br><b><span style=\"font-weight: bold;\">three:</span></b> fourth text<br><b><span style=\"font-weight: bold;\">five:</span></b> fifth text<br></font><br>";
Document document = Jsoup.parse(html);
String firstText = document.select("div:matchesOwn(\\w+)").first().text();
System.out.println(firstText);

... и печатный результат: -

first text
...