2012-01-03 4 views
0

Мне нужно извлечь текст между двумя тегами HTML и сохранить его в строке. Пример HTML Я хочу, чтобы разобрать выглядит следующим образом:Android: Извлечение текста между двумя тегами HTML

<div id=\"swiki.2.1\"> THE TEXT I NEED </div> 

Я сделал это в Java, используя шаблон (swiki\.2\.1\\\")(.*)(\/div) и получить строку, я хочу от группы $ 2. Однако это не будет работать в Android. Когда я иду печатать содержимое $ 2, ничего не появляется, потому что совпадение не получается.

У кого-нибудь была аналогичная проблема с использованием регулярного выражения в android, или есть лучший способ (не регулярное выражение) для анализа HTML-страницы в первую очередь. Опять же, это отлично работает в стандартной тестовой программе Java. Любая помощь будет принята с благодарностью!

+0

http://jsoup.org/ должна быть версия для android ... и про вашу ошибку/матч терпит неудачу ... возможно, на устройстве вы загружаете мобильную версию этого сайта ... – Selvin

+0

Thats очень хороший момент. Однако я просто проверил HTML, и то, что я ищу, одинаково в мобильной версии сайта. Теперь я посмотрю эту ссылку и ответю позже. Спасибо –

ответ

1

Для HTML-парсинга-материал, который я всегда использую HtmlCleaner: http://htmlcleaner.sourceforge.net/

Удивительный LIB, который прекрасно работает с Xpath и конечно же Android. :-)

Это показывает, как вы можете загрузить XML из URL и разобрать его, чтобы получить определенное значение из атрибута XML (также показано в документации):

public static String snapFromHtmlWithCookies(Context context, String xPath, String attrToSnap, String urlString, 
        String cookies) throws IOException, XPatherException { 
      String snap = ""; 

      // create an instance of HtmlCleaner 
      HtmlCleaner cleaner = new HtmlCleaner(); 

      // take default cleaner properties 
      CleanerProperties props = cleaner.getProperties(); 

      props.setAllowHtmlInsideAttributes(true); 
      props.setAllowMultiWordAttributes(true); 
      props.setRecognizeUnicodeChars(true); 
      props.setOmitComments(true); 

      URL url = new URL(urlString); 

      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoOutput(true); 

      // optional cookies 
      connection.setRequestProperty(context.getString(R.string.cookie_prefix), cookies); 
      connection.connect(); 

      // use the cleaner to "clean" the HTML and return it as a TagNode object 
      TagNode root = cleaner.clean(new InputStreamReader(connection.getInputStream())); 

      Object[] foundNodes = root.evaluateXPath(xPath); 

      if (foundNodes.length > 0) { 
        TagNode foundNode = (TagNode) foundNodes[0]; 
        snap = foundNode.getAttributeByName(attrToSnap); 
      } 

      return snap; 
    } 

Просто отредактировать его для ваших нужд , :-)

+0

Если вы хотите получить текстовое значение из тега, например, как ваш пример:

THE TEXT I NEED
Вам нужно проверить ContentNode и получить текстовое значение content.getContent(). ToString(); – einschnaehkeee

Смежные вопросы