Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Xml File Reading from PERL

by kielstirling (Scribe)
on Feb 15, 2012 at 09:11 UTC ( #953885=note: print w/ replies, xml ) Need Help??


in reply to Xml File Reading from PERL

Hi,

<rant>

It's hard to follow your post in the current format. When you are posting a question you'll find that you will get a better response if you follow the site rules for posting follow this link to find more details.

</rant>

Ok, so you have a problem parsing a XML file. A good place to start is to dump out the reference return by XMLin. This will give you all the clues you'll need to retrieve the data you require. Below is a small example script....

#!/usr/bin/perl -w use strict; use XML::Simple; use Data::Dumper; $/ = undef; my $string = <DATA>; my $ref = XMLin($string); print Dumper $ref; __DATA__ <config> <columnname>DATE extract</columnname> <columnname>DATE_deleted</columnname> <columnname>DATE1</columnname> <columnname>DATE2</columnname> </config>

You'll find that this example outputs the following.

$ perl xml.pl $VAR1 = { 'columnname' => [ 'DATE extract', 'DATE_deleted', 'DATE1', 'DATE2' ] };

So $ref->{columnname} is a reference to an array. You can access it like.

my @columnames = @{$ref->{columnname}}; or loop over it without assignment. printf "%s\n", $_ for (@{$ref->{columnname}});


Comment on Re: Xml File Reading from PERL
Select or Download Code
Replies are listed 'Best First'.
Re^2: Xml File Reading from PERL
by issaq (Initiate) on Feb 15, 2012 at 15:28 UTC
    Thanks so much for the reply.... i will follow it from now on Now my xml file looks like ConfigFile.xml **************** <config> <table name="contract"> <columnname>DATE extract</columnname> <columnname>DATE_deleted</columnname> </table> <table name="contract_hist"> <columnname>DATE1</columnname> <columnname>DATE2</columnname> </table> <table name="address"> <columnname>DATE1</columnname> <columnname>DATE2</columnname> <columnname>DATE3</columnname> </table> </config> I read my config xml file, for "address" i should get 3 date values(DA +TE1,DATE2 and DATE3) How can i do this in code?? Please help </config>
      Hi,

      If you run the new XML format via the example script I showed you it will output the new data structure.

      I'm not going to do it for you however I am willing to help you. If you have problems with complex data structures I suggest you read the following The Perl Data Structures Cookbook

        <code> I can able to develop the code like this ********************************************* my $xml = new XML::Simple; my $tblnm="OXF_SIC"; my $config = XMLin('check2.config', ForceArray => [], keyattr => []); foreach my $table (@{$config->{table}}) { if ($table->{name} eq $tblnm) { foreach my $col (@{$table->{columnname}}) { print "$col \n"; } } } ********************************************************** the check2.config file looks like this <config> <columnname>DATE_MODIFIED_ODS</columnname> <columnname>DATE_CREATED_ODS</columnname>
        <columnname>DATE_MODIFIED_ODS</columnname>
        </config> Here i am getting proper output if my $tblnm="OXF_SIC" but when i changed the code to my $tblnm="OXF_SUBSIDIARY" then its throwing the error as:- Can't use string ("DATE_MODIFIED_ODS") as an ARRAY ref while "strict refs" in use at check2_Feb27.pl line 37. Please help me out in this, i am just beginner in Perl this is my 2nd Perl script pls help me <\code>

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://953885]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (18)
As of 2015-07-07 17:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (92 votes), past polls