Sorry I didn't include it in the first round. I had to look it up in the parser doc under the html options; XML::LibXML::Parser. There are other options but recover is probably what you need (recover_silently does the same without any warnings to STDERR). It's an argument to new or a method.
# file named 'libxml-html-forgiving'
use warnings;
use strict;
use XML::LibXML;
my $corpus = join "", <DATA>;
my $parser = XML::LibXML->new();
# give command line an argument to hide errors
@ARGV ? $parser->recover_silently(1) : $parser->recover(1);
my $doc = $parser->parse_html_string($corpus);
print "-" x 60, "\n";
print "parse_html rendered with serialize_html\n";
print "-" x 60, "\n";
print $doc->serialize_html();
print "-" x 60, "\n";
print "parse rendered with serialize_html\n";
print "-" x 60, "\n";
my $doc2 = $parser->parse_string($corpus);
print $doc2->serialize_html();
__END__
<p>
Some HTML & a <b>problem with it > normal but deadly;
<p>
Then run with an arg to suppress errors (which are going to STDERR so they don't interfere with real output either way)-
moo@cow[48]~/bin>perl libxml-html-forgiving 1
------------------------------------------------------------
parse_html rendered with serialize_html
------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://
+www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>
Some HTML & a <b>problem with it > normal but deadly;
<p></p></b></p></body></html>
------------------------------------------------------------
parse rendered with serialize_html
------------------------------------------------------------
<p>
Some HTML a problem with it > normal but deadly;
</p>
Or without an arg to see all the feedback-
moo@cow[49]~/bin>perl libxml-html-forgiving
HTML parser error : htmlParseEntityRef: no name
Some HTML & a <b>problem with it > normal but deadly;
^
------------------------------------------------------------
parse_html rendered with serialize_html
------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://
+www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>
Some HTML & a <b>problem with it > normal but deadly;
<p></p></b></p></body></html>
------------------------------------------------------------
parse rendered with serialize_html
------------------------------------------------------------
:2: parser error : xmlParseEntityRef: no name
Some HTML & a <b>problem with it > normal but deadly;
^
:4: parser error : Premature end of data in tag p line 3
^
:4: parser error : Premature end of data in tag b line 2
^
:4: parser error : Premature end of data in tag p line 1
^
<p>
Some HTML a problem with it > normal but deadly;
</p>
|