[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Omaha.pm] Database -> XML



Hmm... I wrote this this afternoon. Your thoughts? Good? Bad?

I think I like this idiom. Tight code, readable, maintainable. 

It's a one-way extract. From here I just map a bajillion more
tables/columns from our database and I'm done. If/when the subs get to
bulky I'll throw them to .pm files...

Ponder,

j


===========================================
#!/usr/bin/perl

use strict;
use XML::Twig;
use Omni::DB;
use Date::Calc qw(Today_and_Now);

my $dbh = Omni::DB::connect_prod_with_pw;

my $prop = "ATLCNN";
my $asof = sprintf("%04d%02d%02d%02d%02d%02d", Today_and_Now());

my $t = XML::Twig->new();
$t->set_pretty_print('indented');
$t->parse("<revolutiondata hotel='$prop' ver='1.50' seq='1'
asof='$asof'/>");
my $root = $t->root;
add_roominfo($root);
$t->print;

$dbh->disconnect;

sub add_roominfo {
   my ($root) = @_;
   my $roominfo = XML::Twig::Elt->new('roominfo');
   $roominfo->paste(last_child => $root) or die;
   my $sth = $dbh->prepare("select room_type, to_sell_qty from rooms
where prop = '$prop'");
   $sth->execute;
   while (my $href = $sth->fetchrow_hashref) {
      foreach (keys %$href) {
         $href->{$_} =~ s/\s+$//;
      }
      my $elt = XML::Twig::Elt->new( rmtype => {
         rt      => $href->{room_type},
         physcap => $href->{to_sell_qty},
      });
      $elt->paste(last_child => $roominfo) or die;
   }
   $sth->finish;
}
===========================================
<revolutiondata asof="20070411161656" hotel="ATLCNN" seq="1" ver="1.50">
  <roominfo>
    <rmtype physcap="1" rt="ATLANT"/>
    <rmtype physcap="0" rt="DCNSTE"/>
    <rmtype physcap="213" rt="DDN"/>
    <rmtype physcap="367" rt="DDN1"/>
    ...snip!...
  </roominfo>
</revolutiondata>
===========================================