شيما دهباشي

شركت رادكام
34 - پیام , 597 - نظر

خواندن XML با استفاده از PERL

روشهای متعددی برای خواندن XML در Perl وجود دارد. یکی از ساده ترین این روش ها استفاده از XML::Simple که به شما اجازه می دهد به راحتی فایل xml را بخوانید و با دستورات استاندارد Perl به داده های مورد نظر خود دسترسی پیدا کنید .

فایل test.xml را در نظر بگیرید که اطلاعات رو به رو در آن قرار دارد :

   <student>
       <name>sara</name>
       <age>12</age>
  </student>

#!/usr/bin/perl
# use module
use XML::Simple;
use Data::Dumper;
# create object
$xml = new XML::Simple;
# read XML file
$test= $xml->XMLin("test.xml");

تمامی آبجکتهای این کلاس دو متود()  XMLinو () XMLOutدر اختیار ما می گذارند . XMLin فایل xml رو خوانده و آن را به صورت structure که برای perl قابل نمایش باشد در می آورد. XMLout  یک structure را خوانده و به صورت xml تبدیل می کند.

# print output
print Dumper($test);

پس از اینکه فایل xml خوانده شد و به  structure برای perl تبدیل شد ، می توان با استفاده از Data::Dumper  آن را نمایش داد که به صورت زیر خواهد بود :

$VAR1 = {
'name' => 'sara',
 'age' => '12',
 };

و در انتها برای دسترسی به داده ها به صورت زیر عمل می کنیم :

print "$test->{name} is $test->{age} years old. \n";

اما اگر xml کمی پیچیده تر باشد ، چگونه می توان با استفاده از XML::Simple با آن کار کرد ؟

test.xml را این بار به صورت رو به رو در نظر بگیرید :  

<config>
  <student>
       <name>baran</name>
       <age>12</age>
  </student> 
 <student>
       <name>sara</name>
       <age>16</age>
  </student> 
<student>
       <name>sahar</name>
       <age>13</age>
 </student>
</config>

XML::Simple زمانی که عناصر تکراری در فایل وجود دارد ، آن ها را در یک ارایه قرار می دهد و هر آرایه به یک عنصر اشاره می کند .پس برای دسترسی به اطلاعات  "باران"  می توان به صورت زیر عمل کرد :

 $data->{student}->[0]->{name}

foreach my $key(keys (%{$config->{student}}))
{
if(ref($config->{student}{$key}) eq 'HASH')
 {
  if($key eq 'baran')
   {
    $reg_domain = $config->{reseller}{$key}{age};
   }
  }
}

نکته :برای کنترل Parser در XML::Simple دو انتخاب وجود دارد "ForceArray" و "KeyAttr" . مورد اول به عنوان یک flag عمل کرده و XML::Simple  می گویا که عناصر xml را به صورت آرایه نمایش دهد - در حالت عادی این عناصر به صورت hash نمایش داده می شوند با استفاده KeyAttr می  توان XML::Simple را به گونه ای تنظیم کرد که یک عنصر را به عنوان کلید در نظر بگیرد .

$xml = new XML::Simple (KeyAttr=>'id');

 

ارسال شده در تاریخ ۱۰ مرداد ۱۳۸۴ - 11:42 صبح

نظرات

# پاسخ به: خواندن XML با استفاده از PERL  

i am a military
۱۸ بهمن ۱۳۸۵ - 10:59 عصر | علیرضا شاکر

ارسال نظرات

عنوان:  
نام:  
آدرس الکترونیکی:
زبان:
توضیح:  
لطفا متن مقابل را در زیر وارد کنید
(کوچک یا بزرگ بودن حروف مهم نیست)