>>>>> On Wed, 14 Jul 2010 11:40:35 -0700, Dylan Beaudette >>>>> <debeaude...@ucdavis.edu> said:
DB> I would like to generalize some sample XSLT documents to convert the DB> entire file into a sequence of CSV files. Remember, that whatever you do in another language you can do in perl with less code and more obfuscation: use XML::Simple; use IO::File; use strict; my $doc = XMLin($ARGV[0], SuppressEmpty => '', KeyAttr => 'foobarbogus'); my %iohandles; $doc = $doc->{'pedon'}; foreach my $key (keys(%$doc)) { if (!exists($iohandles{$key})) { die "I'm being hacked" if ($key !~ /^[_a-zA-Z0-9]/); $iohandles{$key} = new IO::File; $iohandles{$key}->open(">$key.csv"); print STDERR "writing out $key.csv\n"; } if (ref($doc->{$key}) ne 'HASH') { next; } foreach my $subkey (keys(%{$doc->{$key}})) { if (ref($doc->{$key}{$subkey}) ne 'ARRAY') { if (ref($doc->{$key}{$subkey}) ne 'HASH') { print STDERR "{$key}{$subkey} unexpected type\n"; last; } $doc->{$key}{$subkey} = [$doc->{$key}{$subkey}]; } foreach my $record (@{$doc->{$key}{$subkey}}) { $iohandles{$key}->print(join(",",values(%$record)),"\n"); } } } # perl hack.pl pedons.xml writing out hz_mottles.csv writing out hz_frags.csv writing out horizon.csv writing out hz_roots.csv writing out memo.csv writing out description.csv {description}{surface_frags_bd} unexpected type writing out hz_pores.csv writing out hz_pvsf.csv writing out notes.csv writing out hz_rmf.csv writing out diagnostic.csv writing out vegetation.csv writing out pedon_spatial.csv {pedon_spatial}{y} unexpected type -- Wes Hardaker My Pictures: http://capturedonearth.com/ My Thoughts: http://pontifications.hardakers.net/ _______________________________________________ vox-tech mailing list vox-tech@lists.lugod.org http://lists.lugod.org/mailman/listinfo/vox-tech