# # XML::Element # # Base class for XML Elements. Provides the ability to output the XML document # once it's been parsed using the XML::Parser module. # ############################################################################### $XML::Element::revision = '$Id: Element.pm,v 1.1.1.1 1998/09/23 18:50:25 graham Exp $'; $XML::Element::VERSION = '0.10'; ############################################################################### # Define the basic element type. ############################################################################### package XML::Element; use HTML::Entities; ############################################################################### # Allow for creation via 'new'. ############################################################################### sub new { my ($class, %args) = @_; bless \%args, $class; } ############################################################################### # Output the whole XML document (from here on down) ############################################################################### sub output { my $self = shift; my $type= ref $self; $type =~ s/.*:://; print '<' . $type; foreach (sort keys %{$self}) { if ($_ !~ /Text|Kids/) { print " $_=\"" . $self->{$_} . '"'; } } my @kids = @{ $self->{Kids} }; if ($#kids >= 0) { print '>'; foreach (@kids) { # Allow for outputting of char data unless overridden if ((ref $_) =~ /::Characters$/o) { print encode_entities( $_->{Text} ); } else { $_->output(); } } print ''; } else { print ' />'; } } __END__ ############################################################################### # Embedded POD for the PPD element. ############################################################################### =head1 NAME XML::Element - Base element class for XML elements =head1 SYNOPSIS use XML::Element; @ISA = qw( XML::Element ); =head1 DESCRIPTION Base element class for XML elements. To be derived from to create your own elements for use with the XML::Parser module. Supports output of empty elements using <.... />. It is recommended that you use a version of the XML::Parser module which includes support for Styles; by deriving your own elements from XML::Element and using the 'Objects' style it becomes B easier to create your own parser. =head1 METHODS =over 4 =item output Recursively outputs the structure of the XML document from this element on down. =back =head1 LIMITATIONS The C module has no provisions for outputting processor directives or external entities. It only outputs child elements and any character data which the elements may contain. =head1 AUTHORS Graham TerMarsch =head1 HISTORY v0.1 - Initial version =head1 SEE ALSO L =cut