انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: مشکل در کار با XML در پرل  (دفعات بازدید: 1803 بار)

0 کاربر و 3 مهمان درحال مشاهده موضوع.

آفلاین N3MiSiS

  • Jr. Member
  • *
  • ارسال: 67
  • جنسیت : پسر
مشکل در کار با XML در پرل
« : 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

خیلی ممنون میشم اگه کمکم کنین.
10 نوع مختلف آدم در دنیا وجود دارد ، آنهایی که باینری میفهمند و آنهایی که باینری نمیفهمند.
========================================================

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19722
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : مشکل در کار با XML در پرل
« پاسخ #1 : 29 فروردین 1391، 11:58 ب‌ظ »
تکلیف درسی؟
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین N3MiSiS

  • Jr. Member
  • *
  • ارسال: 67
  • جنسیت : پسر
پاسخ : مشکل در کار با XML در پرل
« پاسخ #2 : 30 فروردین 1391، 01:15 ق‌ظ »
برادر من توو کدوم سرفصل آموزش پرورش یا آموزش عالی در مورد پرل یا اوپن سورس چیزی نوشتن آخه!  :D

من یه مدتی کوچ کردم به لینوکس. برا همین دارم زبان هاشو یاد میگیرم. تا بتونم برا لینوکس هم برنامه بنویسم.
دارم رو nasm, python,perl, qt کار میکنم.

حالا میشه راهنماییم کنین؟؟   :oops:
آخه من با xml زیاد کار نکردم.
10 نوع مختلف آدم در دنیا وجود دارد ، آنهایی که باینری میفهمند و آنهایی که باینری نمیفهمند.
========================================================

آفلاین aliva

  • Sr. Member
  • *
  • ارسال: 363
  • جنسیت : پسر
    • http://vakilzade.ir
پاسخ : مشکل در کار با XML در پرل
« پاسخ #3 : 30 فروردین 1391، 01:39 ق‌ظ »
منم با 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");
}

آفلاین N3MiSiS

  • Jr. Member
  • *
  • ارسال: 67
  • جنسیت : پسر
پاسخ : مشکل در کار با XML در پرل
« پاسخ #4 : 30 فروردین 1391، 01:43 ق‌ظ »
دمت گرم. خیلی هم ترفند خوبی بود.
لینوکس همه چیزش باحاله. حتی کاربراش.
مرسی.
10 نوع مختلف آدم در دنیا وجود دارد ، آنهایی که باینری میفهمند و آنهایی که باینری نمیفهمند.
========================================================

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
پاسخ : مشکل در کار با XML در پرل
« پاسخ #5 : 30 فروردین 1391، 02:26 ق‌ظ »
php خودش گزارنده ی XML‌دارد . پرل هم به گمانم به همچنین ؛
http://www.perlmonks.org/?node_id=62782

آفلاین جادی

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1610
    • در دفاع از آزادی بیان
پاسخ : مشکل در کار با XML در پرل
« پاسخ #6 : 30 فروردین 1391، 12:05 ب‌ظ »
اگر فقط همین یک مورده رجکسی که دوستان گفتن راه حل سریعی است که منم گاهی استفاده می کنم ولی لازمه. اما اگر می خوای واقعا کار کردن با ایکس ام ال یاد بگیری خیلی عالیه و حتما دردسرهای اولیه رو تحمل کن که بعدش تا ده سال راحت باشی در تحلیل (:

اما به این هم دقت کن که کسی برنامه نویسی رو با سوال کردن از صفر یاد نمی گیره. بلکه سرچ می کنه و یاد می گیره راهنما بخونه. مثلا الان من یک سرچ سریع کردم:

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

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

مقاله بالا رو بخون و شروع کن به نوشتن و مشکلات رو بپرس (:
آزادی کیبورد حق هر انسان است - جادی

آفلاین N3MiSiS

  • Jr. Member
  • *
  • ارسال: 67
  • جنسیت : پسر
پاسخ : مشکل در کار با XML در پرل
« پاسخ #7 : 30 فروردین 1391، 12:27 ب‌ظ »
ممنون از همه دوستان واسه راهنمایی هاشون.
انشالا سعی میکنم خیلی زود یه مقاله فارسی در مورد کار با XML بنویسم. و در اختبار دوستان بعدی و مبتدی بزارم.
همینطور جادی جان من یک نکته از ایکس ام ال پرسیدم. XML رو کمی بلدم. فقط توو اون قسمت گیر کرده بودم که اونم به لطف شما حل شد.
خوب بهتره تا کسی کتکمون نزده از اینجا برم  ;D
ممنون از همگی
« آخرین ویرایش: 30 فروردین 1391، 01:02 ب‌ظ توسط N3MiSiS »
10 نوع مختلف آدم در دنیا وجود دارد ، آنهایی که باینری میفهمند و آنهایی که باینری نمیفهمند.
========================================================

آفلاین N3MiSiS

  • Jr. Member
  • *
  • ارسال: 67
  • جنسیت : پسر
پاسخ : مشکل در کار با XML در پرل
« پاسخ #8 : 31 فروردین 1391، 02:55 ب‌ظ »
سلام دوباره به دوستان عزیز.
آقا من این کد رو نوشتم :
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 استفاده کنم.
10 نوع مختلف آدم در دنیا وجود دارد ، آنهایی که باینری میفهمند و آنهایی که باینری نمیفهمند.
========================================================

آفلاین aliva

  • Sr. Member
  • *
  • ارسال: 363
  • جنسیت : پسر
    • http://vakilzade.ir
پاسخ : مشکل در کار با XML در پرل
« پاسخ #9 : 31 فروردین 1391، 05:39 ب‌ظ »
سلام
مسئله شما کمی پیچیده تر شده و اگه همینجور پیش برین به مشکل می‌خورین. پیش نهاد می‌کنم 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");
}

آفلاین N3MiSiS

  • Jr. Member
  • *
  • ارسال: 67
  • جنسیت : پسر
پاسخ : مشکل در کار با XML در پرل
« پاسخ #10 : 31 فروردین 1391، 05:56 ب‌ظ »
ممنون دوست عزیز.
آره راست میگی  یکمی عجیب غریب شده. ولی نه.این قسمت برنامه به xml مربوط نبود. و راهش همون regex بود. که اونم با گذاشتن علامت ؟ حل شد.
رو xml هم دارم کار میکنم. خلاصه اینکه باید بگم خیلی باحالی! TNX
10 نوع مختلف آدم در دنیا وجود دارد ، آنهایی که باینری میفهمند و آنهایی که باینری نمیفهمند.
========================================================

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
پاسخ : مشکل در کار با XML در پرل
« پاسخ #11 : 31 فروردین 1391، 06:12 ب‌ظ »
برای یافتن نخستین رخداد یک الگو از ستاره تنبل بهره میبریم :

".*?" in abc"def""egh" matches "def"
شما باید دو بار روی هر رشته این الگو را پیاده کنید چرا که هر بار تنها نخستین رخداد الگو را بیرون میدهد . الگویی که باید بهره ببرید :
href=".*?"با این الگو نخستین href را بیرون خواهید کشید . لاکن چون بیش از یک رخداد از الگوی بالا داریم باید بیش از یکبار الگوی بالا را بر رشته کار بندیم .

آفلاین N3MiSiS

  • Jr. Member
  • *
  • ارسال: 67
  • جنسیت : پسر
پاسخ : مشکل در کار با XML در پرل
« پاسخ #12 : 31 فروردین 1391، 06:53 ب‌ظ »
از توضیحتون ممنونم. بله کاملا درست عرض میکنید.
دارم رو regular expression هم مطالعه میکنم. خیلی جالبه!  :D
10 نوع مختلف آدم در دنیا وجود دارد ، آنهایی که باینری میفهمند و آنهایی که باینری نمیفهمند.
========================================================