Jsoup允许但不允许

时间:2015-07-03 07:25:17

标签: java jsoup

我正在尝试使用解析HTML文档,我想允许<table>代码但不允许<tbody>

我看过这个链接:

Jsoup parsing an Html file with a tbody tag

我尝试了

Whitelist whiteList = Whitelist.relaxed();

whiteList.addTags("table");
whiteList.addTags("font");

whiteList.addAttributes("table", "align");
whiteList.addAttributes("tr","align");

//whiteList.removeTags("tbody");

String html = "<table>"
    + "<tr align='top'>"
    + "<th><font>Link</th>"
    + "</tr>"
    + "</table>";

boolean valid = Jsoup.isValid(html, whiteList);

System.out.println(valid);

如果删除注释行,我会收到false

同时将其更改为:

Document document = Jsoup.parse(html,"",Parser.xmlParser());

不会产生太大影响。

是否有解决方法?

我想允许<table>但不允许<tbody>

PS - 我想过在解析之前检查<tbody>但它是不知怎的,我觉得这不是一个很好的解决方案。

1 个答案:

答案 0 :(得分:1)

简单回答:你现在不能用Jsoup来做。

<强>解释

根据specs(DOM构建器)所遵循的Jsoup parser,它会在读取tbody内的tr时自动创建table元素但尚未进入tbody

以下是该文件的相关部分:

  

tr = table。 insertRow([index])

     

创建一个tr元素,和一个   tbody如果需要,将它们插入到给定位置的表中   通过参数,返回tr。

接下来,Jsoup将在内部为HTML内容创建tbody元素。如果使用XML解析器,则不会创建tbody元素。不幸的是,Whilelist功能仅适用于HTML,而不适用于XML。您可以在JSoup issue list上发出执行XML的whiltelist功能的请求。