JSoup.clean()不保留相对URL

时间:2016-02-22 20:19:38

标签: html-parsing jsoup

我试过了:

mark {
  font-weight: bold;
  background: #EFEFEF;
}

它们都不起作用:当我尝试清除相对网址时,例如Whitelist.relaxed(); Whitelist.relaxed().preserveRelativeLinks(true); Whitelist.relaxed().addProtocols("a","href","#","/","http","https","mailto","ftp"); Whitelist.relaxed().addProtocols("a","href","#","/","http","https","mailto","ftp").preserveRelativeLinks(true); 我删除了<a href="/test.xhtml">test</a>属性(href)。

我正在使用JSoup 1.8.2。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

问题很可能源于干净方法的召唤。如果您提供基本URI,则所有内容应按预期工作:

String html = ""
        + "<a href=\"/test.xhtml\">test</a>"
        + "<invalid>stuff</invalid>"
        + "<h2>header1</h2>";
String cleaned = Jsoup.clean(html, "http://base.uri", Whitelist.relaxed().preserveRelativeLinks(true));
System.out.println(cleaned);

以上工作并保留相关链接。但是String cleaned = Jsoup.clean(html, Whitelist.relaxed().preserveRelativeLinks(true))会删除该链接。

请注意documentation of Whitelist.preserveRelativeLinks(true)

  

请注意,处理相对链接时,输入文档必须具有   解析时设置适当的基本URI,以便链接的协议   可以确认。无论保存亲属的设置如何   链接选项,链接必须可以解析基础URI到   允许的协议;否则该属性将被删除。