为 BaseX 清理并转换 HTML 为 XML

Clean and convert HTML to XML for BaseX

我想 运行 一些 XQuery 命令在 HTML 源上使用 BaseX,这些源可能充满 <script><style> 必须删除的节点,并且必须成对的未闭合标签(<br><img>)。 (例如 this page 的脏源)

"Converting HTML to XML" 建议使用 Tidy,但它没有 GUI,而且在我的源代码上似乎无法正常工作(它不输出任何内容),我怀疑它是否删除了脚本和其他不必要的标签。顺便说一句,它很旧。

因为没有找到满足我需求的问题,所以我又问了一遍。因为和编码查询的工具很接近,所以在这里问了一下。

BaseX has integration for TagSoup,这会将 HTML 转换为格式正确的 XHTML.

大多数 BaseX 发行版已经捆绑了 TagSoup,如果您从 Linux 存储库安装 BaseX,您可能需要手动添加它(例如,在 Debian 和 Ubuntu 上它被称为 libtagsoup-java).上面链接的文档中提供了不同安装选项的更多详细信息。

之后,使用命令

将 TagSoup 解析器设置为默认
SET PARSER html

或在 XQuery 序言中使用

declare option db:parser "html";

之后,只需获取您想要的文档即可。您链接的亚马逊网站示例:

declare option db:parser "html";
doc('http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;field-keywords=camera')

这应该有效,但没有。我正在向主要开发人员询问它不存在的原因(似乎是因为某些 HTTP 重定向),并将在问题解决后更新答案(或者我理解为什么这不起作用)。在此之前的解决方法是将文档作为文本获取并将其解析为 HTML:

html:parse(fetch:text('http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;field-keywords=camera')