انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: N3MiSiS در 29 فروردین 1391، 10:33 بظ
-
درود به همگی.
آقایون و اساتید برنامه نویس اگه میشه یکم راهنمایی کنید منو.
فرض کنیم این فایل XML ما هست :
<student>
<name>sara</name>
<age>12</age>
<name>Ali</name>
<age>19</age>
<name>Vali</name>
<age>20</age>
</student>
من میخوام همه اون اسم هایی که توو تگ name نوشته شدن رو بخونم و داخل یک آرایه بریزم. یعنی خروجی به شکل زیر باشه :
arr[0]: sara
arr[1]: Ali
arr[2]: vali
خیلی ممنون میشم اگه کمکم کنین.
-
تکلیف درسی؟
-
برادر من توو کدوم سرفصل آموزش پرورش یا آموزش عالی در مورد پرل یا اوپن سورس چیزی نوشتن آخه! :D
من یه مدتی کوچ کردم به لینوکس. برا همین دارم زبان هاشو یاد میگیرم. تا بتونم برا لینوکس هم برنامه بنویسم.
دارم رو nasm, python,perl, qt کار میکنم.
حالا میشه راهنماییم کنین؟؟ :oops:
آخه من با xml زیاد کار نکردم.
-
منم با xml کار نکردم ولی استفاده از regex به ذهنم رسید. ببین این به دردت میخوره؟
use warnings;
use strict;
my $txt = "
<student>
<name>sara</name>
<age>12</age>
<name>Ali</name>
<age>19</age>
<name>Vali</name>
<age>20</age>
</student>
";
my @arr;
while ($txt =~ /\<name>(.*)\<\/name>/g){
push(@arr, $1);
}
foreach my $item(@arr){
print ("$item\n");
}
-
دمت گرم. خیلی هم ترفند خوبی بود.
لینوکس همه چیزش باحاله. حتی کاربراش.
مرسی.
-
php خودش گزارنده ی XMLدارد . پرل هم به گمانم به همچنین ؛
http://www.perlmonks.org/?node_id=62782
-
اگر فقط همین یک مورده رجکسی که دوستان گفتن راه حل سریعی است که منم گاهی استفاده می کنم ولی لازمه. اما اگر می خوای واقعا کار کردن با ایکس ام ال یاد بگیری خیلی عالیه و حتما دردسرهای اولیه رو تحمل کن که بعدش تا ده سال راحت باشی در تحلیل (:
اما به این هم دقت کن که کسی برنامه نویسی رو با سوال کردن از صفر یاد نمی گیره. بلکه سرچ می کنه و یاد می گیره راهنما بخونه. مثلا الان من یک سرچ سریع کردم:
https://www.google.com/search?client=ubuntu&channel=fs&q=parse+xml+in+perl&ie=utf-8&oe=utf-8
و اولین صفحه یکی از کتابخونه های راحت و سریع بود:
http://www.techrepublic.com/article/parsing-xml-documents-with-perls-xmlsimple/5363190
گیر دادی به نظام آموزشی که توش از این چیزها نیست (: کاملا هم درسته. یک چیز دیگه هم که نیست آموزش کشف راه است. کسی با یاد گرفتن دستورات سی برنامه نویس نمی شه بلکه باید معلم یاد بده که چطوری کتابخونه ها رو سرچ کنه و چطوری راهنماها رو بخونه (که دفعات اول آدم مطلقا هیچ چیز از ریفرنس های توابع نمی فهمه) و حتی چطوری برنامه رو کمپایل کنه و بعد دیباگ (:
مقاله بالا رو بخون و شروع کن به نوشتن و مشکلات رو بپرس (:
-
ممنون از همه دوستان واسه راهنمایی هاشون.
انشالا سعی میکنم خیلی زود یه مقاله فارسی در مورد کار با XML بنویسم. و در اختبار دوستان بعدی و مبتدی بزارم.
همینطور جادی جان من یک نکته از ایکس ام ال پرسیدم. XML رو کمی بلدم. فقط توو اون قسمت گیر کرده بودم که اونم به لطف شما حل شد.
خوب بهتره تا کسی کتکمون نزده از اینجا برم ;D
ممنون از همگی
-
سلام دوباره به دوستان عزیز.
آقا من این کد رو نوشتم :
while ($txt =~ /\<a href="(.*)\"/g){
push(@arr, $1);
}
الان مشکل اینجاست که تا آخرین کاراکتر " متنو میخونه. در حالی که من میخوام بعد از href=" به اولین کاراکتر " رسید دیگه رشته رو cut کنه یعنی به شکی زیر :
یعنی اینو بگیره :
<a href="/home" class="active-trail active">خانه</a></li><li class="leaf menu-mlid-152 has-children" id="about"><a href="/about-us" >درباره ما</a><div class="mega"><div class="mega-content-two clearfix">
و اینا رو بده :
/home
/about-us
در حالی که الان اینو میده :
/home" class="active-trail active">خانه</a></li><li class="leaf menu-mlid-152 has-children" id="about"><a href="/about-us" >درباره ما</a><div class="mega"><div class="mega-content-two clearfix
ساده بگم یعنی داخل تگ های href رو در بیاره.
اگه میشه دوستان حرفه ای یه کمکی هم در این مورد بکنن تا بدونم چطوری از regular exp استفاده کنم.
-
سلام
مسئله شما کمی پیچیده تر شده و اگه همینجور پیش برین به مشکل میخورین. پیش نهاد میکنم xml بخونین قبل از این که دردسرتون زیاد شه.
استفاده از رجکس روش مناسبی برای این کار نیست. بیشتر به عنوان کار راه انداز بهش نگاه کنین.
use warnings;
use strict;
my $txt = <<EOF;
<a href="/home" class="active-trail active">خانه</a></li>
<li class="leaf menu-mlid-152 has-children" id="about">
<a href="/about-us" >درباره ما</a><div class="mega">
<div class="mega-content-two clearfix">
EOF
my @arr;
while ($txt =~ /\<a href="(.*?)\"/g){
push(@arr, $1);
}
foreach my $item(@arr){
print ("$item\n");
}
-
ممنون دوست عزیز.
آره راست میگی یکمی عجیب غریب شده. ولی نه.این قسمت برنامه به xml مربوط نبود. و راهش همون regex بود. که اونم با گذاشتن علامت ؟ حل شد.
رو xml هم دارم کار میکنم. خلاصه اینکه باید بگم خیلی باحالی! TNX
-
برای یافتن نخستین رخداد یک الگو از ستاره تنبل بهره میبریم :
".*?" in abc"def""egh" matches "def"
شما باید دو بار روی هر رشته این الگو را پیاده کنید چرا که هر بار تنها نخستین رخداد الگو را بیرون میدهد . الگویی که باید بهره ببرید :
href=".*?"
با این الگو نخستین href را بیرون خواهید کشید . لاکن چون بیش از یک رخداد از الگوی بالا داریم باید بیش از یکبار الگوی بالا را بر رشته کار بندیم .
-
از توضیحتون ممنونم. بله کاملا درست عرض میکنید.
دارم رو regular expression هم مطالعه میکنم. خیلی جالبه! :D