From: Grant M. <gr...@us...> - 2002-10-09 23:06:10
|
Update of /cvsroot/perl-xml/xml-filter-nsnormalise/bin In directory usw-pr-cvs1:/tmp/cvs-serv17032/bin Added Files: xmlnsnorm Log Message: - fixed fatal error on mapping to the same prefix the document already uses - added xmlnsnorm command-line utility - fixed typo in sample code --- NEW FILE: xmlnsnorm --- #!/usr/bin/perl -w ############################################################################## # $Id: xmlnsnorm,v 1.1 2002/10/09 23:06:08 grantm Exp $ # # Title: xmlnsnorm # # Author: Grant McLean <gr...@cp...> # # Script for normalising namespace prefixes in XML files. Use -h option for # help. # use strict; use Getopt::Long; use Pod::Usage; use IO::File; use XML::SAX::ParserFactory; use XML::SAX::Writer; use XML::Filter::NSNormalise; ############################################################################## # Handle command line parameters # my %opt = (m => []); GetOptions(\%opt, 'm=s', 'h') || pod2usage(0); pod2usage({-verbose => 2, -exitval => 0}) if($opt{h}); pod2usage(0) unless(@{$opt{m}}); my $filename = shift || '-'; ############################################################################## # Build up the hash of URI to Prefix mappings. # my %mapping = map { split /\s+/, $_, 2 } @{$opt{m}}; ############################################################################## # Create a filter pipeline and 'run' it # my $writer = XML::SAX::Writer->new( Output => \*STDOUT ); my $filter = XML::Filter::NSNormalise->new( Map => \%mapping, Handler => $writer ); my $parser = XML::SAX::ParserFactory->parser(Handler => $filter); my $fd = IO::File->new("<$filename") || die "$!"; $parser->parse_file($fd); print "\n"; exit; __END__ =head1 NAME xmlnsnorm - normalises namespace prefixes in XML files =head1 SYNOPSIS xmlnsnorm -m 'URI prefix' [ -m 'URI prefix' ... ] [ <filename> ] Options: -m <mapping> specify URI to prefix mapping (space separated) -h help - display the full documentation Example: xmlnsnorm -m 'http://purl.org/dc/elements/1.1/ dc' in.xml >out.xml =head1 DESCRIPTION This script takes an XML document either on STDIN or from a named file and writes a 'normalised' version of the file to STDOUT. Any prefixed names (elements or attributes) associated with a mapped namespace URI will have their prefix changed to the prefix you specify. Any namespace prefixes which occur in the document but for which you have not specified a mapping, will be passed through unchanged. =head1 SEE ALSO This script uses the following modules: XML::SAX::ParserFactory XML::Filter::NSNormalise XML::SAX::Writer =head1 AUTHOR Grant McLean <gr...@cp...> =head1 COPYRIGHT Copyright (c) 2002 Grant McLean. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut |