Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

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



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.


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 $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}});

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>

      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>
        </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 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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://953885]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2018-05-25 03:27 GMT
Find Nodes?
    Voting Booth?