JSoup.clean()不保留相对URL

Not*_*aeL 3 html-parsing jsoup

我试过了:

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);
Run Code Online (Sandbox Code Playgroud)

它们都不起作用:当我尝试清除相对网址时,就像<a href="/test.xhtml">test</a>href删除了属性(<a>test</a>)。

我正在使用JSoup 1.8.2。

有任何想法吗?

luk*_*sch 5

该问题很可能源于clean方法的调用。如果您提供基本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);
Run Code Online (Sandbox Code Playgroud)

以上工作并保持相对链接。String cleaned = Jsoup.clean(html, Whitelist.relaxed().preserveRelativeLinks(true))但是,通过删除链接。

请注意Whitelist.preserveRelativeLinks(true)文档

请注意,在处理相对链接时,输入文档在解析时必须设置适当的基本URI,以便可以确认链接的协议。不管保留相对链接选项的设置如何,该链接都必须可针对基本URI解析为允许的协议。否则属性将被删除。