在不太完美的 HTML 文档中使用 xmllint 和 xpath?

问题描述 投票:0回答:3

我有一个由现有工具生成的 HTML 页面 - 我无法更改此工具的输出。

但是,我想使用

xmllint
--xpath
选项从下载的网页中挑选出一些特定的信息。问题是页面开头为:

<html lang=en><head>...

并且

xmllint
几乎立即抛出错误:

html.out:2: parser error : AttValue: " or ' expected
<html lang=en><head>
           ^

问题肯定是

lang
属性值周围缺少引号。整个页面都充满了此类问题。 (虽然只是偶尔。)

几乎每个浏览器都可以很好地解析它 - 我怎样才能说服

xmllint
也这样做呢?我想避免必须注入中间步骤来“修复”文件。相反,我想要:

1) 找到一个标志、验证选项等来帮助解析器,或者:

2)使用其他工具。 (但是什么?

xmllint
始终是我使用命令行 XPath 命令的首选。)

此外,仅使用

xpath
会导致:

> xpath html.out '//myquery...'

not well-formed (invalid token) at line 2, column 11, ...
html xml xpath xmllint
3个回答
24
投票

您可以使用

xmllint
命令行选项在
--html
中启用 HTML 解析器。这样,您将能够处理 HTML 文档。


9
投票

如果不中止解析,您可以使用以下命令隐藏错误:

2>/dev/null

然后是Xidel,我制作它只是为了从html页面中选取一些数据。 (虽然它并不完美。我被告知它无法处理两个格式错误的文档)

xidel html.out -e //yourquery...

6
投票

您应该使用宽松的解析器预处理 HTML。 (这是主要区别:HTML 允许使用比 XML 更宽松的语法。)也就是说,尝试 HTML5-Tidy 并让 XMLLint 处理结果:

input HTML
 |
 v
Tidy
 |
 v
xmllint
 |
 v
result
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.