Jsoup允许使用<table>但不允许使用<tbody>。

3

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

我看到了这个链接:

使用tbody标签解析Html文件的Jsoup

我尝试过

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>

附注:我考虑过在解析之前检查<tbody>,但我觉得这不是一个很好的解决方法。

1个回答

1
简单回答:目前无法使用Jsoup实现此功能。
解释:
根据Jsoup解析器(DOM构建器)遵循的规范,在读取位于table中但尚未位于tbody中的tr时,它会自动创建tbody元素。
以下是文档中相关部分:

tr = table . insertRow( [ index ] )

创建一个tr元素,如有必要,同时创建一个 tbody,将它们插入到给定参数位置的表格中,并返回tr

它意味着Jsoup内部将为HTML内容创建tbody元素。如果您使用XML解析器,则不会创建该tbody元素。不幸的是,Whilelist功能仅适用于HTML,而不适用于XML。您可以在JSoup问题列表上提出请求,要求实现XML的白名单功能。

谢谢这个参考。我得想一个解决办法。 - Abi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接