XML::Parser Entities

Peter J. Holzer hjp at wsr.ac.at
Fri Nov 26 03:59:55 CST 1999


Hallo,

    das ist vielleicht gar keine Perl- sondern eine XML-Frage.

Ich verwende XML::Parser, um XHTML (mittels tidy -asxml aus HTML
generiert) zu parsen. Da kommen aber noch Entity References wie ö
drin vor, die mir der Parser scheinbar wegschmeißt. Weiß wer, wie ich

* entweder den Parser dazu bringen kann, die Entities in das
  entsprechende Zeichen umzuwandeln

* oder welchen Handler ich installieren muß, um das selber zu machen
  (ExternEnt scheint es nicht zu sein) 

* oder ob ich durch Einfügen von <!ENTITY> im XML-File an geeigneter
  Stelle (wo?) &ouml; und Konsorten vordefinieren kann?

Ein Workaround, der mir einfällt, ist im XML-File alle &ouml; durch
&#214; zu ersetzen. Das funktioniert nämlich, wenn auch nicht besonders
schön.

ObCode:

#!/usr/bin/perl -w

use strict;
use XML::Parser;
use IO::File;

sub handle_start {
    my ($parser, $element, %attr) = (@_);

    print "handle_char: ";
    if ($element eq "meta") {
	if ($attr{name} eq 'description') {
	    print "description: ", $attr{content};
	}
	if ($attr{name} eq 'keywords') {
	    print "keywords: ", $attr{content};
	}
    }
    print "\n";
}

sub handle_char {
    my ($parser, $text) = (@_);

    print "handle_char: ";
    for my $i (qw/title h1 h2 h3 h4 h5 h6/) {
	if ($parser->within_element($i)) {
	    print "$i ";
	}
    }
    print "$text\n";
}

sub handle_externent {
    my ($parser, $base, $sysid, $pubid) = (@_);
    print "handle_externent: base = $base, sysid = $sysid, pubid = $pubid\n";
}

my $p1 = new XML::Parser (Handlers => {Start => \&handle_start,
				       Char => \&handle_char,
				       ExternEnt => \&handle_externent
				      },
			  ProtocolEncoding => 'ISO-8859-1',
			  NoExpand => 0
			);
my $fh = new IO::File ("test.xml", "r");
$p1->parse($fh);


-- 
   _  | Peter J. Holzer             | Nobody should ever have to be
|_|_) | Sysadmin WSR / Obmann LUGA  | ashamed if they have a secret love
| |   | hjp at wsr.ac.at               | for writing computer programs that
__/   | http://wsrx.wsr.ac.at/~hjp/ | actually work.  -- Donald E. Knuth
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 371 bytes
Desc: not available
Url : http://mail.pm.org/archives/vienna-pm/attachments/19991126/1dc90a10/attachment.bin


More information about the Vienna-pm mailing list