Here's what I have:
Nice fragment :) here is a complete program
#!/usr/bin/perl --
use strict;
use warnings;
use HTML::TreeBuilder;
Main(@ARGV);
exit(0);
sub Main {
my $html = '<html><body>
<img src="0" alt="0">
<img src="1" alt="1">
<img src="2" alt="2">
<img src="3" alt="">
<img src="4">
<img src="5">
</body></html>';
my $tree = HTML::TreeBuilder->new();
$tree->parse($html);
local $\ = $/;
print $_->as_HTML
for $tree->look_down( qw' _tag img ',
sub { not defined $_[0]->attr('alt') } );
print '---';
print $_->as_HTML
for $tree->look_down( qw' _tag img ',
sub { not length $_[0]->attr('alt') } );
print '---';
$_->attr( alt => MAlt($_) )
for $tree->look_down( qw' _tag img ',
sub { not length $_[0]->attr('alt') } );
print $_->as_HTML for $tree->look_down(qw' _tag img ');
} ## end sub Main
sub MAlt { '!' . $_[0]->attr('src') }
__END__
<img src="4" />
<img src="5" />
---
<img alt="" src="3" />
<img src="4" />
<img src="5" />
---
<img alt="0" src="0" />
<img alt="1" src="1" />
<img alt="2" src="2" />
<img alt="!3" src="3" />
<img alt="!4" src="4" />
<img alt="!5" src="5" />
Alternatively, try HTML::TreeBuilder::XPath
#!/usr/bin/perl --
use strict;
use warnings;
use HTML::TreeBuilder::XPath;
Main(@ARGV);
exit(0);
sub Main {
my $html = '<html><body>
<img src="0" alt="0">
<img src="1" alt="1">
<img src="2" alt="2">
<img src="3" alt="">
<img src="4">
<img src="5">
</body></html>';
my $tree = HTML::TreeBuilder::XPath->new();
$tree->parse($html);
local $\ = $/;
print $_->as_HTML for $tree->findnodes('//img[not(@alt)]');
print '---';
print $_->as_HTML for $tree->findnodes('//img[not(string-length(@a
+lt))]');
print '---';
$_->attr( alt => MAlt($_) )
for $tree->findnodes('//img[not(string-length(@alt))]');
print $_->as_HTML for $tree->findnodes('//img');
} ## end sub Main
sub MAlt { '!' . $_[0]->attr('src') }
__END__
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|