Prev: FAQ 7.9 How do I create a module?
Next: FAQ 6.19 Why does using $&, $`, or $' slow my program down?
From: alwaysonnet on 21 Apr 2010 08:35 Hello all, I'm trying to parse the XML using XML::Twig Module as my XML could be very large to handle using XML::Simple. Please help me out of how to print the values based on the following... <B>get the values of Sender, Receiver</B> <B>get the FileType. In this case possible values are InitTAP,FatalRAP,ReTxTAP</B> <CODE> get the values of Sender, Receiver get the FileType. In this case possible values are InitTAP,FatalRAP,ReTxTAP </CODE> <P>Here is the XML content....</P> <CODE> <?xml version="1.0" encoding="UTF-8"?> <Data> <ConnectionList> <Connection> <Sender>BRADD</Sender> <Receiver>SHANE</Receiver> <FileItemList> <FileItem> <FileID>378910</FileID> <Tmstp>2009-01-16T16:59:07+01:00</Tmstp> <FileType> <InitTAP> <TAPSeqNo>00083</TAPSeqNo> <NotifFileInd>false</NotifFileInd> <ChargeInfo> <TAPTxCutoffTmstp>2009-01-16T09:43:26+02:00</ TAPTxCutoffTmstp> <TAPAvailTmstp>2009-01-16T16:59:07+01:00</ TAPAvailTmstp> <TAPCurrency>XDR</TAPCurrency> <TotalNoOfCalls>39</TotalNoOfCalls> <TotalNetCharge>11.470</TotalNetCharge> <TotalTax>0.000</TotalTax> </ChargeInfo> </InitTAP> </FileType> </FileItem> <FileItem> <FileID>380582</FileID> <Tmstp>2009-01-20T18:00:00+01:00</Tmstp> <FileType> <ReTxTAP> <TAPSeqNo>00083</TAPSeqNo> <NotifFileInd>false</NotifFileInd> <RefRAPSeqNo>00044</RefRAPSeqNo> <RefRAPID>380573</RefRAPID> <ChargeInfo> <TAPTxCutoffTmstp>2009-01-16T09:43:26+02:00</ TAPTxCutoffTmstp> <TAPAvailTmstp>2009-01-20T18:00:00+01:00</ TAPAvailTmstp> <TAPCurrency>XDR</TAPCurrency> <TotalNoOfCalls>39</TotalNoOfCalls> <TotalNetCharge>11.470</TotalNetCharge> <TotalTax>0.000</TotalTax> </ChargeInfo> </ReTxTAP> </FileType> </FileItem> <FileItem> <FileID>380573</FileID> <Tmstp>2009-01-16T20:34:45+01:00</Tmstp> <FileType> <FatalRAP> <RAPSeqNo>00044</RAPSeqNo> <RAPStatus>Exchanged</RAPStatus> <RefTAPSeqNo>00083</RefTAPSeqNo> <RefTAPID>378910</RefTAPID> <RAPCreatTmstp>2009-01-16T20:21:30+01:00</ RAPCreatTmstp> <RAPAvailTmstp>2009-01-16T20:21:30+01:00</ RAPAvailTmstp> <ChargeInfo> <TAPTxCutoffTmstp>2009-01-16T09:43:26+02:00</ TAPTxCutoffTmstp> <TAPAvailTmstp>2009-01-16T16:59:07+01:00</ TAPAvailTmstp> <TAPCurrency>XDR</TAPCurrency> <TotalNoOfCalls>-39</TotalNoOfCalls> <TotalNetCharge>-11.470</TotalNetCharge> <TotalTax>0.000</TotalTax> </ChargeInfo> </FatalRAP> </FileType> </FileItem> </FileItemList> </Connection> </ConnectionList> </Data> </CODE>
From: Tad McClellan on 21 Apr 2010 09:13 alwaysonnet <kalyanrajsista(a)gmail.com> wrote: > I'm trying to parse the XML using XML::Twig Module What have you tried so far? If you show us your broken code we will help you fix it. Have you seen the Posting Guidelines that are posted here frequently yet? -- Tad McClellan email: perl -le "print scalar reverse qq/moc.liamg\100cm.j.dat/" The above message is a Usenet post. I don't recall having given anyone permission to use it on a Web site.
From: John Bokma on 21 Apr 2010 09:49 alwaysonnet <kalyanrajsista(a)gmail.com> writes: > Hello all, > I'm trying to parse the XML using XML::Twig Module as my XML could be > very large to handle using XML::Simple. Please help me out of how to > print the values based on the following... > <B>get the values of Sender, Receiver</B> > <B>get the FileType. In this case possible values are > InitTAP,FatalRAP,ReTxTAP</B> For very simple things like this I would (probably, based on what I just read) use XML::SAX or (even) XML::Parser. Regarding the latter, http://johnbokma.com/perl/ has some simple examples under "XML Processing using Perl" -- John Bokma j3b Hacking & Hiking in Mexico - http://johnbokma.com/ http://castleamber.com/ - Perl & Python Development
From: Klaus on 21 Apr 2010 13:06 On 21 avr, 14:35, alwaysonnet <kalyanrajsi...(a)gmail.com> wrote: > Hello all, > I'm trying to parse the XML using XML::Twig Module as my XML could be > very large to handle using XML::Simple. Please help me out of how to > print the values based on the following... > <B>get the values of Sender, Receiver</B> > <B>get the FileType. In this case possible values are > InitTAP,FatalRAP,ReTxTAP</B> > > <CODE> > get the values of Sender, Receiver > get the FileType. In this case possible values are > InitTAP,FatalRAP,ReTxTAP > </CODE> What Tad McClellan and John Bokma suggested should be your first path of investigation. However, let me bring in a shameless plug: You could also use my module XML::Reader http://search.cpan.org/~keichner/XML-Reader-0.32/lib/XML/Reader.pm This module is specifically designed to handle very big XML files, it only uses the memory it needs to have one XML element at a time in memory (plus a small additional memory for buffering, which is independent of the size of the XML file) Here is a sample program: use strict; use warnings; use XML::Reader; my $rdr = XML::Reader->newhd(\*DATA, {filter => 5}, { root => '/Data/ConnectionList/Connection/Sender', branch => [ '/' ] }, { root => '/Data/ConnectionList/Connection/Receiver', branch => [ '/' ] }, { root => '/Data/ConnectionList/Connection/FileItemList/FileItem/ FileType', branch => [ '/InitTAP/TAPSeqNo', '/ReTxTAP/TAPSeqNo', '/FatalRAP/RAPSeqNo', ] }, ); my ($sender, $receiver); while ($rdr->iterate) { if ($rdr->rx == 0) { $sender = $rdr->rvalue->[0]; } elsif ($rdr->rx == 1) { $receiver = $rdr->rvalue->[0]; } else { my ($InitTAP, $ReTxTAP, $FatalRAP) = @{$rdr->rvalue}; my ($type, $seqno) = defined $InitTAP ? ('InitTAP', $InitTAP) : defined $ReTxTAP ? ('ReTxTAP', $ReTxTAP) : defined $FatalRAP ? ('FatalRAP', $FatalRAP) : ('???', '???'); printf "Sender: %-5s, Receiver: %-5s, Type: %-8s, Seqno: %s \n", $sender, $receiver, $type, $seqno; } } __DATA__ <?xml version="1.0" encoding="UTF-8"?> <Data> <ConnectionList> <Connection> <Sender>BRADD</Sender> <Receiver>SHANE</Receiver> <FileItemList> <FileItem> <FileID>378910</FileID> <Tmstp>2009-01-16T16:59:07+01:00</Tmstp> <FileType> <InitTAP> <TAPSeqNo>00083</TAPSeqNo> <NotifFileInd>false</NotifFileInd> <ChargeInfo> <TAPTxCutoffTmstp>2009-01-16T09:43:26+02:00</ TAPTxCutoffTmstp> <TAPAvailTmstp>2009-01-16T16:59:07+01:00</ TAPAvailTmstp> <TAPCurrency>XDR</TAPCurrency> <TotalNoOfCalls>39</TotalNoOfCalls> <TotalNetCharge>11.470</TotalNetCharge> <TotalTax>0.000</TotalTax> </ChargeInfo> </InitTAP> </FileType> </FileItem> <FileItem> <FileID>380582</FileID> <Tmstp>2009-01-20T18:00:00+01:00</Tmstp> <FileType> <ReTxTAP> <TAPSeqNo>00083</TAPSeqNo> <NotifFileInd>false</NotifFileInd> <RefRAPSeqNo>00044</RefRAPSeqNo> <RefRAPID>380573</RefRAPID> <ChargeInfo> <TAPTxCutoffTmstp>2009-01-16T09:43:26+02:00</ TAPTxCutoffTmstp> <TAPAvailTmstp>2009-01-20T18:00:00+01:00</ TAPAvailTmstp> <TAPCurrency>XDR</TAPCurrency> <TotalNoOfCalls>39</TotalNoOfCalls> <TotalNetCharge>11.470</TotalNetCharge> <TotalTax>0.000</TotalTax> </ChargeInfo> </ReTxTAP> </FileType> </FileItem> <FileItem> <FileID>380573</FileID> <Tmstp>2009-01-16T20:34:45+01:00</Tmstp> <FileType> <FatalRAP> <RAPSeqNo>00044</RAPSeqNo> <RAPStatus>Exchanged</RAPStatus> <RefTAPSeqNo>00083</RefTAPSeqNo> <RefTAPID>378910</RefTAPID> <RAPCreatTmstp>2009-01-16T20:21:30+01:00</ RAPCreatTmstp> <RAPAvailTmstp>2009-01-16T20:21:30+01:00</ RAPAvailTmstp> <ChargeInfo> <TAPTxCutoffTmstp>2009-01-16T09:43:26+02:00</ TAPTxCutoffTmstp> <TAPAvailTmstp>2009-01-16T16:59:07+01:00</ TAPAvailTmstp> <TAPCurrency>XDR</TAPCurrency> <TotalNoOfCalls>-39</TotalNoOfCalls> <TotalNetCharge>-11.470</TotalNetCharge> <TotalTax>0.000</TotalTax> </ChargeInfo> </FatalRAP> </FileType> </FileItem> </FileItemList> </Connection> </ConnectionList> </Data> ======= Here is the output: Sender: BRADD, Receiver: SHANE, Type: InitTAP , Seqno: 00083 Sender: BRADD, Receiver: SHANE, Type: ReTxTAP , Seqno: 00083 Sender: BRADD, Receiver: SHANE, Type: FatalRAP, Seqno: 00044
From: sln on 21 Apr 2010 14:07 On Wed, 21 Apr 2010 10:06:14 -0700 (PDT), Klaus <klaus03(a)gmail.com> wrote: >On 21 avr, 14:35, alwaysonnet <kalyanrajsi...(a)gmail.com> wrote: >> Hello all, >> I'm trying to parse the XML using XML::Twig Module as my XML could be >> very large to handle using XML::Simple. Please help me out of how to >> print the values based on the following... >> �<B>get the values of Sender, Receiver</B> >> �<B>get the FileType. In this case possible values are >> InitTAP,FatalRAP,ReTxTAP</B> >> >> <CODE> >> �get the values of Sender, Receiver >> �get the FileType. In this case possible values are >> InitTAP,FatalRAP,ReTxTAP >> </CODE> > >What Tad McClellan and John Bokma suggested should be your first path >of investigation. > >However, let me bring in a shameless plug: > >You could also use my module XML::Reader >http://search.cpan.org/~keichner/XML-Reader-0.32/lib/XML/Reader.pm Indeed shameless. > >This module is specifically designed to handle very big XML files, it >only uses the memory it needs to have one XML element at a time in >memory (plus a small additional memory for buffering, which is >independent of the size of the XML file) Is memory at a premium? > >Here is a sample program: > >use strict; >use warnings; >use XML::Reader; > >my $rdr = XML::Reader->newhd(\*DATA, {filter => 5}, > { root => '/Data/ConnectionList/Connection/Sender', branch => >[ '/' ] }, > { root => '/Data/ConnectionList/Connection/Receiver', branch => >[ '/' ] }, > { root => '/Data/ConnectionList/Connection/FileItemList/FileItem/ >FileType', branch => [ > '/InitTAP/TAPSeqNo', > '/ReTxTAP/TAPSeqNo', > '/FatalRAP/RAPSeqNo', ^^^^^^^^^^^^ What do these have to do with it? > ] }, > ); > >my ($sender, $receiver); > >while ($rdr->iterate) { > if ($rdr->rx == 0) { $sender = $rdr->rvalue->[0]; } > elsif ($rdr->rx == 1) { $receiver = $rdr->rvalue->[0]; } > else { > my ($InitTAP, $ReTxTAP, $FatalRAP) = @{$rdr->rvalue}; ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Again, what do these have to do with it? [snip] >======= >Here is the output: > >Sender: BRADD, Receiver: SHANE, Type: InitTAP , Seqno: 00083 >Sender: BRADD, Receiver: SHANE, Type: ReTxTAP , Seqno: 00083 >Sender: BRADD, Receiver: SHANE, Type: FatalRAP, Seqno: 00044 Thats nice. Lets say he generally said "in this case its:" InitTAP ReTxTAP FatalRAP Why? Because its the file type. Maybe he wants all file types of the sender/reciever's. But its hard to know what the OP wants isin't it. -sln
|
Next
|
Last
Pages: 1 2 3 Prev: FAQ 7.9 How do I create a module? Next: FAQ 6.19 Why does using $&, $`, or $' slow my program down? |