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

时间:2011-01-25 09:00:54

标签: html xml perl html-parsing xml-parsing

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

#!/bin/bash
echo $HTML | xpath -q -e "//h2[1]"

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

not well-formed (invalid token) at line X, column Y, byte Z:

我无法真正修复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 =

由于

2 个答案:

答案 0 :(得分:5)

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

另请参阅HTML Scraping with XPath上的这篇文章。

答案 1 :(得分:4)

xml_grep是XML :: Twig附带的命令行工具,可用于使用XPath从HTML中提取数据。通常它适用于XML,但您可以使用-html选项来处理HTML(它使用HTML :: TreeBuilder将XML转换为HTML)。

例如:

> xml_grep -html -t 'a[@class="genu"]' http://stackoverflow.com
> Stack Exchange