Android:在两个HTML标记之间提取文本

时间:2012-01-03 09:51:09

标签: java android html regex parsing

我需要在两个HTML标记之间提取文本并将其存储在字符串中。我要解析的HTML示例如下:

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

我使用模式(swiki\.2\.1\\\")(.*)(\/div)在Java中完成此操作,并从组$ 2获取我想要的字符串。但是这在android中不起作用。当我去打印$ 2的内容时,没有出现,因为匹配失败。

有没有人在Android中使用正则表达式有类似的问题,或者是否有更好的方法(非正则表达式)首先解析HTML页面。同样,这在标准的java测试程序中工作正常。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

对于HTML-parsing-stuff,我总是使用HtmlCleaner:http://htmlcleaner.sourceforge.net/

非常棒的lib,适用于Xpath,当然还有Android。 : - )

这显示了如何从URL下载XML并解析它以从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;
    }

只需根据您的需要进行编辑即可。 : - )