Android: извлечение текста между двумя тегами HTML - PullRequest
0 голосов
/ 03 января 2012

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

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

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

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

1 Ответ

1 голос
/ 03 января 2012

Для HTML-анализа я всегда использую HtmlCleaner: http://htmlcleaner.sourceforge.net/

Потрясающая библиотека, которая прекрасно работает с 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;
    }

Просто отредактируйтеэто для ваших нужд.: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...