• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل با یک کلاس xml2array
#1
سلام
یک کلاس جالب پیدا کردم برای تبدیل xml to array و برعکسش.در این آدرس.
مشکلی که باهاش دارم اینه که باید بدونیم یک رکورد داریم یا بیشتر از یک رکورد و در آدرس دهی اون رو رعایت کنیم.
یعنی اگر در xml داشته باشیم
کد پی‌اچ‌پی:
<root>
<
user>
value
</user>
</
root
نمیشه بصورت

کد پی‌اچ‌پی:
[root][user][0][value
مقدارش رو درآورد.و باید بصورت
کد پی‌اچ‌پی:
[root][user][value
آدرس دهیش کرد. و همین طور برعکس.
اگر ما چند تا user مثلا داشته باشیم باید بصورت
[root][user][0][value]
آدرس دهیش کنیم.بعبارتی برای یک رکورد [شماره تگ] کار نمیکنه.
شاید به نظر ساده بیاد ولی روی برنامه ای که دارم کار میکنم و کلا بر پایه xml دارم مینویسم خیلی کار رو مشکل کرده.
مشکل رو چطوری میشه حل کرد؟
آیا کلاسی سراغ دارین که بدون مشکل کار xml ro array و array to xml رو انجام بده؟
  پاسخ
تشکر شده توسط :
#2
ظاهرا شما دارین اشتباه می کنید
مثلا برای دست رسی به این value باید از
کد پی‌اچ‌پی:
['root']['_c']['user']['_v'
و اگه چند تگ user داشته باشی می تونی از
کد پی‌اچ‌پی:
['root']['_c']['user'][0]['_v'
استفاده کنی که با تغییر عدد صفر به تگ های دیگه می ری
  پاسخ
تشکر شده توسط :
#3
اونی که نوشتم مثال بود
بله شکل درستش اینه
ولی میخواستم بدونم راهی نیست تا از دست این آدرس دادن بصورت [0] و یا چیزای دیگه راحت شیم؟
مشکل اینه که اگر ندونیم یک تگ داریم یا بیشتر از یک تگ باید دو جور کد نوشته بشه.یکی با [آدرس تگ] یکی هم بدون این.
حالا فرض کنین صد جور تگ داریم و نمیدونیم چند بار تکرار شده.چه فاجعه ای از لحاظ کدنویسی پیش میاد! :|
نمیدونم تونستم منظورم رو برسونم یا نه.
در حالت عادی فکر میکنم باید جوری کلاس رو مینوشتن که با [0] تگ شکاره یک رو نمایش بده چه یک بار اون تگ تکرار شده باشه چه جند بار.ولی این طور نیست.برای موقعی مه تنها یکبار تکرار شده شکل کدنویسی باید فرق کنه.
راهی برای تصحیحش به نظرتون نمیرسه؟
  پاسخ
تشکر شده توسط :
#4
بنظرم نیازی نیست که این طور عمل بشه!
در واقع هیچ فاجعه ایی در کار نیست
شما یه XML می دید و به صورتarray می گیرید. با سرچ توی array می تونید محتواش روهم بفهمید. یا XML رومی دونید وظبق XML و از array استفاده می کنید یا XML رو نمی شناسید و با کنترل از array استفاده میکنید
---
می تونید بگید که کجا از این کد استفاده کردید تا شاید اینطور بشه سوتفام رو رفع کرد Wink
  پاسخ
تشکر شده توسط :
#5
خوب ببینین
ما مثلا اگر در xml داشته باشیم
کد پی‌اچ‌پی:
<test>
value
</test
و ندونیم یک دونه test داریم یا چند تا.
برای در آوردن مقدار این تگ باید یک بار بنویسیم
کد پی‌اچ‌پی:
echo $xml [test][_v
و یک بار هم بنویسیم
کد پی‌اچ‌پی:
echo $xml [test][0][_v
اگر یک دونه تگ test داشته باشیم کد دوم کار نمیکنه و اگر بیش از یک دونه داشته باشیم کد اول.
در نتیجه اگر ندونیم چند بار از این تکرار شده برای هر تگ باید هر دو تا کد نوشته بشه و اونجاست که فاجعه پیش میاد Big Grin
  پاسخ
تشکر شده توسط :
#6
خب کنترل کنید که کدوم حالت اتفاق افتاده
مثلا:
کد پی‌اچ‌پی:
if(isset($xml[test][_v]))
    echo 
$xml[test][_v];
elseifif(isset($xml[test][0][_v]))
    echo 
$xml[test][0][_v]; 

یا فوقش دست ببرید توی سورس کلاس! نمی شه؟
  پاسخ
تشکر شده توسط :
#7
الان از راه کنترل کردن دارم باهاش کار میکنم.
وای خوب انقدر تگ و اینها زیاد داره برنامه ام که واقعا میشه گفت حجم کار رو حداقل دوبرابر بیشتر کرده.
در کلاس هم میشه دست برد احتمالا.
برای همین تاپیک زدم دیگه Big Grin
در این رابطه کمک میخوام.
  پاسخ
تشکر شده توسط :
#8
خب من دیدم که کلاس نیست بلکه چند تا تابع اند
یکم دست بردم توش تا خروجی که می خوای برات ایجاد کنه البته خودت یکم بیشتر باهاش ار کن که یوقت مشکلی نداشته باشه
اما بنظرم اینطوری دیگه یخورده از XML دور می شه!
---
توی حلقه foreach یکی دو تا شرط رو با کامنت کذاشتن از برنامه حذف کردم


فایل‌های پیوست
.php   function.php (اندازه 2.82 KB / تعداد دانلود: 2)
  پاسخ
تشکر شده توسط : parsbin
#9
ممنون
این رو تست کردم کار نکرد برام.
ببینین چیزی که کار رو راه میندازه اینه که
کد پی‌اچ‌پی:
$xml[test][0][_v]; 
به این شکل رو اگر یک دونه تگ تست هم داشتیم عمل کنه و لازم نشه اگر یک دونه از تگ تست مثلا داشتیم به شکل
کد پی‌اچ‌پی:
$xml[test][_v]; 
حتما نوشته بشه.
  پاسخ
تشکر شده توسط :
#10
مگه قرار نبود که اون ایندکس عددی همیشه باشه
کد پی‌اچ‌پی:
<root>
    <
user>oia</user>
</
root
این حالا دیگه به این شکل قابل دست رسیه
کد پی‌اچ‌پی:
$xml['root'][0]['user'][0]['_v']; 
  پاسخ
تشکر شده توسط : parsbin


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان