in reply to Building XML with tab delimited
pin not equal appending first Charge <REPORT TYPE="AB"><REASON1>data1</REASON1><REASON2>data2</REASON2><REA +SON3>data3</REASON3><PERSON><PIN>Pin 1</PIN><NAME>data5</NAME><ZIP>da +ta6</ZIP></PERSON><CHARGE><DATE>data7</DATE><TIME>data8</TIME></CHARG +E></REPORT> pin equal <REPORT TYPE="AB"><CHARGE><DATE>data9</DATE><TIME>data10</TIME></CHARG +E></REPORT> appending a Charge pin equal <REPORT TYPE="AB"><CHARGE><DATE>data11</DATE><TIME>data12</TIME></CHAR +GE></REPORT> appending a Charge writing document Process completed successfully
<?xml version="1.0"?> <XML_FILE><REPORT TYPE="AB"><REASON1>data1</REASON1><REASON2>data2</RE +ASON2><REASON3>data3</REASON3><PERSON><PIN>Pin 1</PIN><NAME>data5</NA +ME><ZIP>data6</ZIP></PERSON><CHARGE><DATE>data7</DATE><TIME>data8</TI +ME></CHARGE></REPORT></XML_FILE>
use strict; use warnings; use Data::Dumper; use XML::LibXML; #my $READFILENAME = "SomeDir\\data.txt"; my $WRITEFILENAME = "test.xml"; my $doc = XML::LibXML::Document->new('1.0'); my $root = $doc->createElement("XML_FILE"); open (FILEWRITE, ">$WRITEFILENAME"); # open (READFILE, $READFILENAME); my $copy_person_pin = "XX"; <DATA>;<DATA>; ############################ while (my $line = <DATA>) { chomp $line; my @data = split(/\t/,$line); my $reason1 = $data[0]; my $reason2 = $data[1]; my $reason3 = $data[2]; my $person_pin = $data[3]; my $name = $data[4]; my $zip = $data[5]; my $date = $data[6]; my $time = $data[7]; my $report = $doc->createElement("REPORT"); $report->setAttribute('TYPE'=>'AB'); if ($person_pin ne $copy_person_pin) { # Build the Report tags my @sortedReportTag = qw ( REASON1 REASON2 REASON3); my %reportHashTags; @reportHashTags { @sortedReportTag } = ($reason1, $reason2, $reason3 ); + buildXMLElements(\@sortedReportTag, \%reportHashTags, $report); + $root-> appendChild($report); # Build the element for Person Tag my $person = $doc->createElement("PERSON"); my @sortedPersonTag = qw ( PIN NAME ZIP); my %personHashTags; @personHashTags { @sortedPersonTag } = ($person_pin, $name, $zip ); # Build the elements for Person Tag buildXMLElements(\@sortedPersonTag, \%personHashTags, $person); $report-> appendChild($person); # Build the elements for Charge Tag my $charge = $doc->createElement("CHARGE"); my @sortedChargeTag = qw ( DATE TIME ); my %chargeHashTags; @chargeHashTags { @sortedChargeTag } = ($date, $time ); buildXMLElements(\@sortedChargeTag, \%chargeHashTags, $charge); $report-> appendChild($charge); $copy_person_pin = $person_pin; print STDERR "pin not equal\n"; print STDERR "appending first Charge\n"; print STDERR $report->toString(),"\n"; # returns a character string } else { print STDERR "pin equal\n"; my $charge = $doc->createElement("CHARGE"); my @sortedChargeTag = qw ( DATE TIME ); my %chargeHashTags; @chargeHashTags { @sortedChargeTag } = ($date, $time ); # Build the elements for Charge Tag + buildXMLElements(\@sortedChargeTag, \%chargeHashTags, $charge); $report-> appendChild($charge); print STDERR $report->toString(),"\n"; # returns a character string + print STDERR "appending a Charge\n"; } } print STDERR "writing document\n"; $doc->setDocumentElement($root); # Write the XML to a file print FILEWRITE ($doc->toString()); close FILEWRITE; sub buildXMLElements { my($elementTags, $hashTags, $parentElement) = @_; for my $name (@$elementTags) { my $reportTag = $doc->createElement($name); my $reportValue = $hashTags->{$name}; $reportTag->appendTextNode($reportValue); $parentElement->appendChild($reportTag); } } __DATA__ Reason1 Reason2 Reason3 Pin Name Zip Date Time data1 data2 data3 Pin 1 data5 data6 data7 data8 data1 data2 data3 Pin 1 data5 data6 data9 data10 data1 data2 data3 Pin 1 data5 data6 data11 data12
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Building XML with tab delimited
by sannag (Sexton) on Aug 11, 2016 at 04:32 UTC | |
by Marshall (Canon) on Aug 11, 2016 at 04:41 UTC | |
by robby_dobby (Hermit) on Aug 11, 2016 at 05:02 UTC |