<[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> I'm making something, and need to block out BGCOLOR attribute. The problem
> is, the BGCOLOR could be with or without quotation marks. This is the code
I
> used:
>
> $article =~ s/ bgcolor=("?)(.*?)("?)//gi
>

Here is how I would do it, using SAX with a helper module called
XML::SAX::Machines:

package Skip::BGCOLOR;

use strict;
use XML::SAX::Base;
use vars qw/@ISA/;
@ISA = qw/XML::SAX::Base/;

sub start_element {
  my($self, $el) = @_;

  for my $property ( keys %{ $el->{Attributes} } ) {
    if ($property =~ /BGCOLOR$/i ) {
      delete( ${ $el->{Attributes} }{$property} );
    }
  }

  $self->SUPER::start_element( $el ); # forward the element downstream
}

sub xml_decl { }
1;

package main;
use strict;

use XML::SAX::Machines qw/:all/;

my($pipeline) = Pipeline(
        'Skip::BGCOLOR' =>
        \*STDOUT
);

$pipeline->parse_string( join('', <DATA>) );

print("\n");

__DATA__
<html>
  <head>
    <title>No BGCOLORs</title>
  </head>
  <body bgcolor="red">
    <h1 bgcolor="white">No BGCOLORs</h1>
    <hr width="75%" />
    <div BGCOLOR="blue">No BGCOLORs</div>
  </body>
</html>

Much cleaner and it guarantees to not fudge up your markup.

Todd W.



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to