⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 canonical

📁 one of the linux gd libraries
💻
字号:
#!/usr/local/bin/perl -w## Copyright 1999 Clark Cooper <coopercc@netheaven.com># All rights reserved.## This program is free software; you can redistribute it and/or# modify it under the same terms as Perl itself.## $Revision: 1.1.1.1 $## $Date: 2003/07/27 11:07:11 $##	This program take an XML document (either on standard input or#	from a filename supplied as an argument) and generates corresponding#	canonical XML document on the standard output. The definition of#	"Canonical XML" that I'm using is taken from the working draft#	published by W3C on 19-Jan-2000:##		http://www.w3.org/TR/2000/WD-xml-c14n-20000119.html##	The latest version of this document is at:##		http://www.w3.org/TR/xml-c14n#use XML::Parser;my $indoctype = 0;my $inroot = 0;my $p = new XML::Parser(ErrorContext  => 2,			Namespaces    => 1,			ParseParamEnt => 1,			Handlers      => {Start => \&sthndl,					  End   => \&endhndl,					  Char  => \&chrhndl,					  Proc  => \&proc,					  Doctype => sub {$indoctype = 1},					  DoctypeFin => sub {$indoctype = 0}					 }			);my $file = shift;if (defined $file) {  $p->parsefile($file);}else {  $p->parse(*STDIN);}################## End main################sub sthndl {  my $xp = shift;  my $el = shift;  $inroot = 1 unless $inroot;  my $ns_index = 1;  my $elns = $xp->namespace($el);  if (defined $elns) {    my $pfx = 'n' . $ns_index++;    print "<$pfx:$el xmlns:$pfx=\"$elns\"";  }  else {    print "<$el";  }  if (@_) {    for (my $i = 0; $i < @_; $i += 2) {      my $nm = $_[$i];      my $ns = $xp->namespace($nm);      $_[$i] = defined($ns) ? "$ns\01$nm" : "\01$nm";    }    my %atts = @_;    my @ids = sort keys %atts;    foreach my $id (@ids) {      my ($ns, $nm) = split(/\01/, $id);      my $val = $xp->xml_escape($atts{$id}, '"', "\x9", "\xA", "\xD");      if (length($ns)) {	my $pfx = 'n' . $ns_index++;	print " $pfx:$nm=\"$val\" xmlns:$pfx=\"$ns\"";      }      else {	print " $nm=\"$val\"";      }    }  }  print '>';}  # End sthndlsub endhndl {  my ($xp, $el) = @_;  my $nm = $xp->namespace($el) ? "n1:$el" : $el;  print "</$nm>";  if ($xp->depth == 0) {    $inroot = 0;    print "\n";  }}  # End endhndlsub chrhndl {  my ($xp, $data) = @_;  print $xp->xml_escape($data, '>', "\xD");}  # End chrhndlsub proc {  my ($xp, $target, $data) = @_;  unless ($indoctype) {    print "<?$target $data?>";    print "\n" unless $inroot;  }}# Tell emacs that this is really a perl script#Local Variables:#Mode: perl#End:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -