【问题标题】:Parsing <META content=""> using jsoup使用 jsoup 解析 <META content="">
【发布时间】:2016-01-19 22:59:28
【问题描述】:

需要帮助使用 JSOUP 从 HTML META 标记中提取 URL 值。这是我的 html -

String html = "<HTML><HEAD><...></...><META ......><META ......><META http-equiv="refresh" content="1;URL='https://xyz.com/login.html?redirect=www.google.com'"></HEAD></HTML>"

预期输出:“https://xyz.com/login.html?redirect=www.google.com”

谁能告诉我怎么做。谢谢

【问题讨论】:

标签: java android html parsing jsoup


【解决方案1】:

假设是第一个META

String html_src = ...

Document doc = Jsoup.parse(html);
Element eMETA = doc.select("META").first();
String content = eMETA.attr("content");
String urlRedirect = content.split(";")[1];
String url = urlRedirect.split("=")[1].replace("'","");

【讨论】:

  • 在我看来此解决方案不起作用:由于内容字符串中有 2 =,因此此解决方案返回的 url 将是 https://xyz.com/login.html?redirect 。如果有人想将他的重定向到一个带有 ' 在 url 中的 url,你将使用你的 replace 语句删除所有出现的 '。
【解决方案2】:

使用 Java 8 和 Jsoup,此解决方案将起作用:

Document document = Jsoup.parse(yourHTMLString);
String url = document.select("meta[http-equiv=refresh]").stream()
                .findFirst()
                .map(doc -> {
                    try {
                        String content = doc.attr("content").split(";")[1];
                        Pattern pattern = Pattern.compile(".*URL='?(.*)$", Pattern.CASE_INSENSITIVE);
                        Matcher m = pattern.matcher(content);
                        String redirectUrl = m.matches() ? m.group(1) : null;
                        return redirectUrl == null ? null :
                                redirectUrl.endsWith("'") ? redirectUrl.substring(0, redirectUrl.length() - 2) : redirectUrl;
                    } catch (Exception e) {
                        return null;
                    }

                }).orElse(null);

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 2014-07-30
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多