我正在尝试使用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>
但它是不知怎的,我觉得这不是一个很好的解决方案。
答案 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功能的请求。