如何在perl中解析HTML5标签?

时间:2016-03-08 12:28:02

标签: html5 perl html-parsing

我想解析HTML5标签? 当我解析<section>标签的投诉时。我不希望它给出错误。

错误是“</section>”标记丢失。

我的输入是: -

<?xml version="1.0" encoding="utf-8"?><html xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/1999/xhtml" xmlns:m="http://www.w3.org/1998/Math/MathML" xml:lang="en" lang="en">
<head>
<link rel="stylesheet" type="text/css" title="day" href="../css/main.css"/>
<title>Electric Potential and Electric Potential Energy</title>
<meta charset="UTF-8"/>
<meta name="dcterms.conformsTo" content="PXE 1.39 ProductLevelReuse"/>
<meta name="generator" content="PXE Tools version 1.39.69"/>
</head>
<body>
<section class="chapter" ><header><h1 class="title"><span class="number">20</span> Electric Potential and Electric Potential Energy</h1></header>
<section class="frontmatter">
<section class="listgroup"><header><h1 class="title">Big Ideas</h1></header>
<ol>
<li><p>Electric potential energy is similar to gravitational potential energy.</p></li>
</ol>
</section>
</section>
</body>
</html>

我的代码是: -

use warnings ;
use strict;
use HTML::Tidy;
my $file_name ="d:/perl/test.xhtml";
undef $/;
open xhtml_file, '<:encoding(UTF-8)', "$file_name" || die "no htm file found $!";
my $contents = <xhtml_file>;
close (xhtml_file);
$/ = "\n";

my $tidy = HTML::Tidy->new();
$tidy->ignore(
                text => qr/DOCTYPE/,
                text => qr/html/,
                text => qr/meta/,
                text => qr/header/
);
$tidy->parse( "foo.html", $contents );
for my $message ( $tidy->messages )
    {
        print $message->as_string, "\n";
    }

错误日志是: -

foo.html (10:1) Error: <section> is not recognized!
foo.html (10:1) Warning: discarding unexpected <section>
foo.html (11:1) Error: <section> is not recognized!
foo.html (11:1) Warning: discarding unexpected <section>
foo.html (12:1) Error: <section> is not recognized!
foo.html (12:1) Warning: discarding unexpected <section>
foo.html (16:1) Warning: discarding unexpected </section>
foo.html (17:1) Warning: discarding unexpected </section>

我该如何解决?

1 个答案:

答案 0 :(得分:0)

根据其文档,HTML::Valid模块基于www.html-tidy.org并支持HTML5。看起来它会为您提供您在PerlMonks的这个post中想要的行号和列号。