我需要在两个HTML标记之间提取文本并将其存储在字符串中。我要解析的HTML示例如下:
<div id=\"swiki.2.1\"> THE TEXT I NEED </div>
我使用模式(swiki\.2\.1\\\")(.*)(\/div)
在Java中完成此操作,并从组$ 2获取我想要的字符串。但是这在android中不起作用。当我去打印$ 2的内容时,没有出现,因为匹配失败。
有没有人在Android中使用正则表达式有类似的问题,或者是否有更好的方法(非正则表达式)首先解析HTML页面。同样,这在标准的java测试程序中工作正常。任何帮助将不胜感激!
答案 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;
}
只需根据您的需要进行编辑即可。 : - )