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)
您应该使用宽松的解析器预处理HTML.(这是主要区别:HTML允许比XML更宽松的语法.)也就是说,尝试HTML5-Tidy并让XMLLint处理结果:
input HTML
|
v
Tidy
|
v
xmllint
|
v
result
Run Code Online (Sandbox Code Playgroud)
如果不中止解析,您可以隐藏错误:
2>/dev/null
Run Code Online (Sandbox Code Playgroud)
然后是 Xidel,我只是从html页面中挑选一些数据.(虽然它并不完美.我被告知两个不能处理的格式错误的文件)
xidel html.out -e //yourquery...
Run Code Online (Sandbox Code Playgroud)