Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

cog (4665)

Journal of cog (4665)

Friday March 14, 2008
08:56 AM

ETOOMANYXMLMODULES

[ #35905 ]

I now present you with a bit of code I've written in these past few days. Pay attention not to the code, but to the comment I put in the beginning:


# yeah, yeah, so there are several modules on CPAN to create XML from an hash ref
# it took me less time to write this code than to find the best module to do it for me
sub _hash2xml {
        my ($tag_exterior, $ref, $indent) = (@_, 0);

        my $xml;

        if ( ref $ref eq 'HASH' ) {
                if ( $tag_exterior ) {
                        $xml .= "<$tag_exterior>";
                }
                for ( keys %$ref ) {
                        $xml .= "\n " . " " x $indent . _hash2xml( $_, $ref->{$_}, $indent+1 );
                }
                if ( $tag_exterior ) {
                        $xml .= "\n" . " " x $indent
                                  . "</$tag_exterior>";
                }
        }
        elsif (ref $ref eq 'ARRAY' ) {
                if ( $tag_exterior ) {
                        $xml .= "<$tag_exterior>";
                }
                for ( @$ref ) {
                        $xml .= _hash2xml( undef, $_, $indent );
                }
                if ( $tag_exterior ) {
                        $xml .= "\n" . " " x $indent
                                  . "</$tag_exterior>";
                }
        }
        else {
                if ( $tag_exterior ) {
                        $xml .= "<$tag_exterior>" . $ref . "</$tag_exterior>";
                }
                else {
                        $xml .= $ref;
                }
        }

        return $xml;
}

As a side note, the project was already using XML::Dumper, so first I looked into that. Unfortunately, I needed to export XML according to a specification, and XML::Dumper was creating attributes where I wanted tags, and doing a few other things with it I didn't want.

So I turned to XML::Simple. Unfortunately, it was creating an <opt> tag around the XML and recording the XML to a file without me asking for it.

I did peruse the documentation of these two modules a bit...

I did search for XML modules on CPAN and saw a bunch of them I had already used in the past...

But then I thought: "ah, the hell with it... it's going to take me less time writing it myself than looking for the right module!"

And it did.

UPDATE: The Portuguese word for "exterior" (which in this case should probably be "outer") is the same as the English one. However, while in English you'd say "exterior tag", in Portuguese you say "tag exterior". That's the explanation of the name of the variable.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • Ok, but don't you at least want to use XML::Writer or something so that the XML gets escaped properly? You'll end up having an '<' somewhere and then who's going to be all "muhaha, fear me, I wrote this with two hands tied behind my back"?
    • The data being exported is not likely to include <s, but just in case, I'll follow your suggestion. Thanks.