使用Perl-XML忽略格式错误的XML

Max*_*Max 0 html xml perl html-parsing xml-parsing

我正在使用perl命令行实用程序xpath从一些HTML代码中提取数据,如下所示:

#!/bin/bash
echo $HTML | xpath -q -e "//h2[1]"
Run Code Online (Sandbox Code Playgroud)

HTML格式错误导致xpath抛出以下错误:

not well-formed (invalid token) at line X, column Y, byte Z:
Run Code Online (Sandbox Code Playgroud)

我无法真正修复HTML,因为它是由外部源提供的,这意味着每次更改HTML时我都必须再次手动修复它.

我找了一个很空的xpath man:http: //www.linuxcertif.com/man/1/xpath.1p/

我想知道是否有办法告诉xpath忽略格式错误的HTML.为了让您了解它的错误形式,请参阅源代码中的几行:

<div id="header-background" style="top: 42px; >&nbsp;</div> <---- missing closing "
<div id-"page-inner">   <---- - instead of =
Run Code Online (Sandbox Code Playgroud)

谢谢

dog*_*ane 5

试用HTML :: TreeBuilder :: XPath,它使用HTML解析器构建一个文档,然后可以使用xpath查询该文档.对于格式错误的XML,HTML Parser应该没问题.

另请参阅有关使用XPath进行HTML Scraping的文章.