2011-02-12 7 views
0

привет всем я использую jsoup в приложении Java-Й для разбора HTMLИсключения: Невозможно разобрать запрос: containsOwn (текст)

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

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

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

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

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

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

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 
+0

спасибо большое, он отлично работает, но что, если я хочу, чтобы настроить выше пример заставить его работать, чтобы получить первый текст вообще, не решив, что он находится в определенном теге (то есть, получите первый текст в документе), будет ли он работать, как этот document.select (": matchesOwn (\\ w +)"). . первый() текст(); –

+0

Да, 'document.select (": matchesOwn (\\ w +) "). First(). Text();' отлично работает. Я просто протестировал его. – limc

+0

Большое спасибо за быструю обратную связь, у меня есть еще один вопрос, хотя если вы можете помочь, как получить содержимое html этого первого элемента, соответствующее регулярному выражению, а не текст? для получения вывода что-то вроде

first text