使用xmllint和xpath与不完美的HTML文档?

Cra*_*tis 9 html xml xpath xmllint

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

不过,我想使用xmllint--xpath选项从下载的网页挑选出的信息数的某些片段.问题是该页面以:

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

xmllint立即抛出错误:

html.out:2: parser error : AttValue: " or ' expected
<html lang=en><head>
           ^
Run Code Online (Sandbox Code Playgroud)

这个问题肯定似乎是lang属性值周围缺少的引号.整个页面都充满了这种问题.(虽然只是零星的.)

几乎每个浏览器都可以解析这个问题 - 我怎么能说服xmllint这样做呢?我想避免必须注入一个中间步骤来"修复"该文件.相反,我想要:

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

2)使用其他一些工具.(但是什么?xmllint总是我的命令行XPath命令.)

此外,仅使用xpath结果:

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

not well-formed (invalid token) at line 2, column 11, ...
Run Code Online (Sandbox Code Playgroud)

Ste*_*ppo 12

您可以xmllint使用--html命令行选项启用HTML解析器.这样,您就可以处理HTML文档.


Bol*_*wyn 5

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

input HTML
 |
 v
Tidy
 |
 v
xmllint
 |
 v
result
Run Code Online (Sandbox Code Playgroud)


Ben*_*ela 5

如果不中止解析,您可以隐藏错误:

2>/dev/null
Run Code Online (Sandbox Code Playgroud)

然后是 Xidel,我只是从html页面中挑选一些数据.(虽然它并不完美.我被告知两个不能处理的格式错误的文件)

xidel  html.out -e //yourquery...
Run Code Online (Sandbox Code Playgroud)