booksxml.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:23 2010 from booksxml.pl 2006/06/11 3.8 KB.

#!/Perl
# 
use strict;
use Cwd;
use Win32::OLE qw(in with);
my ($file, $tag, $bnode, $att);
my $dobook = 1;
if ($dobook) {
   $file = "books.xml";
   $tag = "author";
   $bnode = "//book";
   $att = "id";
} else {
   $file = "c:\\fgcvs\\flightgear\\source\\projects\\vc8\\flightgear.vcproj";
   $bnode = "//Files";
   $tag = "File";
   $att = "RelativePath";
}
my $cnt = 0;
my $ccnt = 0;
my ($LOG);
my $write_log = 0;
my $outfile = 'tempxml.txt';
if ( open( $LOG, ">$outfile" ) ) {
    $write_log = 1;
} else {
    $write_log = 0;
    prt( "WARNING: Unable to open $outfile LOG ...\n" );
}
prt( "$0 - Hello, World...\n" );
my $xmlDoc = Win32::OLE->new('MSXML2.DOMDocument.3.0') or mydie( "new() failed" );
$xmlDoc->{async} = "False";
$xmlDoc->{validateOnParse} = "False";
prt( "Loading $file document as XML ...\n" );
$xmlDoc->load($file) or mydie( "Failed to load $file ...\n" );
prt("\nUsing getElementsByTagName($tag) ...\n" );
my $objNodeList = $xmlDoc->getElementsByTagName($tag);
my $ncnt = 0; ## keys( %$objNodeList );
foreach my $node (in $objNodeList ) {
   $ncnt++;
}
prt( "Got $ncnt nodes for tag $tag ...\n" );
$cnt = 0;
foreach my $node (in $objNodeList ) {
   my $txt = $node->{Text};
   my $id = $node->getAttribute($att);
   $cnt++;
   if (length($id) > 0 ) {
      prt( "$cnt <$tag $att=\"$id\">$txt</$tag>\n" );
   } else {
      prt( "$cnt <$tag>$txt</$tag>\n" );
   }
   show_node( $node, 1 );
}
prt("\nGetting single node [$bnode] ... and show node ...\n");
my $nodeBook = $xmlDoc->selectSingleNode($bnode); # "//book"
$cnt = 1;
show_node($nodeBook, 1);
prt("\nGetting all nodes [$bnode] ...\n");
my $nodeBooks = $xmlDoc->selectNodes($bnode); # "//book"
$cnt = 0;
foreach my $node (in $nodeBooks) {
   $cnt++;
   my $id = $node->getAttribute($att); # "id"
   if( length($id) > 0 ) {
      prt( "<$bnode $att=\"$id\" />\n" );
   } else {
      prt( "Got NO $att attribute ...\n" );
   }
   show_node($node, 1);
}
prt( "\nEnumerate ALL nodes of document ...\n" );
my $allNodes = $xmlDoc->selectNodes("*");
$cnt = 0;
foreach my $node (in $allNodes) {
   $cnt++;
   show_node($node);
}
prt( "Done ...\n" );
prt( "\nGetting document root ...\n" );
my $root = $xmlDoc->documentElement();
$cnt = 0;
show_node($root, 1);
prt( "\nEnumerate root->childNodes document ...\n" );
my $nodeList = $root->childNodes();
foreach my $node (in $nodeList) {
   $cnt++;
   prt("\n$cnt SHOW NODE ...\n");
   show_node($node, 1);
   $ccnt = 0;
   if (my $cn = $node->childNodes()) {
      foreach my $nn (in $cn) {
         $ccnt++;
         prt( "$ccnt - SHOWING CHILD ...\n" );
         show_node($nn, 1);
      }
   }
}
prt( "Done ...\n" );
###############################################################
### services only below
#######################
sub show_node {
   my ($nd, $lev) = @_;
   my $xml = $nd->xml();
   my $id = $nd->getAttribute($att); # "id"
   my $txt = $nd->{Text};
   my $val = $nd->value();
   my $tn = $nd->tagName();
   if (length($tn) > 0) {
      prt("$cnt tagName=[$tn]\n");
   }
   if (length($txt) > 0) {
      prt("$cnt txt=[$txt]\n");
   }
   if (length($id) > 0) {
      prt("$cnt $att=\"$id\"\n");
   }
   if (length($val) > 0) {
      prt("$cnt val=[$val]\n");
   }
   if (length($xml)) {
      prt("$cnt xml=[$xml]\n");
   }
   if ($lev > 5) {
      return;
   }
   my $cn = $nd->firstChild();
   if ($cn) {
      prt("$cnt HAS FIRST CHILD!\n");
      show_node($cn, $lev+1);
   } else {
      prt("$cnt HAS NO CHILDREN!\n");
   }
   #if (my $cn = $nd->childNodes()) {
   #   foreach my $nn (in $cn) {
   #      show_node($nn, ($lev+1));
   #   }
   #}
}
################################
### output and log file
sub wlog {
   my $ml = shift;
   print $LOG $ml;
}
sub prt {
   my $m = shift;
   if ($write_log) {
      wlog($m);
   }
   print $m;
}
sub mydie {
   my $msg = shift;
   if ($write_log) {
      wlog($msg);
   }
   die $msg;
}

index -|- top

checked by tidy  Valid HTML 4.01 Transitional