PDA

View Full Version : سوال: كار با SimpleXML : خطايابي فرماييد



moslem-visual
دوشنبه 11 آذر 1387, 14:11 عصر
سلام، خيلي وقت بود ميخواستم كار با XML در PHP 5 رو تجربه كنم، در مورد سادگي SimpleXML نسبت به SAX زياد شنيده بودم، امروز يه كد بر اساس چيزايي كه توي اينترنت ياد گرفتم نوشتم اما نميدونم چرا وقتي به foreach ميرسه Invalid Argument ميده، همينكار رو با متد children هم امتحان كردم اما با اون روش هم خطاي Not found function ميده، خلاصه گيج شدم، چندبار هم كنترل كردم اما مشكلش رو نفهميدم، ممنون ميشم اساتيد و دوستان محترم يه راهنمايي بفرمايند، در ضمن از Wamp 2.0 استفاده ميكنم، متشكر.

فايل XML مورد استفاده :

<?xml version="1.0" encoding="utf-8"?>

<personels>

<person id="1" name="Yannick" family="Van De Falde" country="Netherlands">

<experts>
<expert>Programming</expert>
<expert>Actor</expert>
<expert>Model</expert>
</experts>

<languages>
<language>Danish</language>
<language>English</language>
<language>Francis</language>
</languages>

</person>

<person id="2" name="Max" family="Thieriot" country="United States of America">

<experts>
<expert>Actor</expert>
<expert>Football</expert>
<expert>Model</expert>
<expert>Windows</expert>
</experts>

<languages>
<language>English</language>
<language>Francis</language>
</languages>

</person>

</personels>


اسكريپت :

<?php
$xml = simplexml_load_file('simplexml_test.xml');

echo "<h2>Today guests:</h2>
<br/><br/>";

foreach($xml->personels->person as $person){

echo '<b>' . $person['name'] . ' ' . $person['family'] . '</b> from ' . $person['country'];
echo '<br/><b>Experts :</b><br/>';

foreach($person->experts->expert as $expert){
echo '&rsaquo;' . $expert . '<br/>';
}

echo '<br/><b>Languages :</b><br/>';

foreach($person->languages->language as $language){
echo '&rsaquo;' . $language . '<br/>';
}

echo '<br/><br/>';
}
?>

moslem-visual
چهارشنبه 13 آذر 1387, 10:33 صبح
دوستان عزيز، من چند روزه منتظرم، تنها سايت فارسي زباني هم كه فكر ميكردم بتونم ازش كمك بگيرم اينجاست، خواهشا اگر ميتونيد راهنمايي كنيد. تاپيك داشت ديگه ميرفت صفحه ي بعد...

I,Nobody
چهارشنبه 13 آذر 1387, 11:48 صبح
من باهاش كار نكردم.
ولي فكر ميكنم اول بايد $xml به عنوان كلاس تعريف بشه.
شما هيچ جا اونو تعريف نكردي.
اصلاً فكر مي كنم نحوه استفاده ات مشكل داره.
سعي مي كنم كلاسشو پيدا و استفاده كنم تا ببينم مشكل كجاست

moslem-visual
چهارشنبه 13 آذر 1387, 12:22 عصر
ممنون از جوابت، براي استفاده از SimpleXML هم ميشه اون رو به صورت شي تعريف كرد و هم با استفاده از اون تابعي كه در اسكريپت من هست، بعد از اون بايد به همين صورت از متدهاش استفاده كرد، يه حالت مجيك داره، نميدونم مشكلش چيه...

moslem-visual
چهارشنبه 13 آذر 1387, 13:58 عصر
از دوستان محترم ممنونم، حل شد!

I,Nobody
چهارشنبه 13 آذر 1387, 17:04 عصر
از دوستان محترم ممنونم، حل شد!
لطفاً توضیح بدید که مشکل چی بود و چطور حل شد؟

moslem-visual
پنج شنبه 14 آذر 1387, 17:57 عصر
والا مشكل از عدم آشنايي بنده با نكات ريز كار با SimpleXML بود. در كد بالا المنت ريشه ي سند personels هست و من براي foreach اول به اينصورت از اشاره گر استفاده كردم:



$xml->personels->person

و همين باعث ايجاد خطا ميشد، در واقع نيازي نبود كه من مسير رو از personels شروع كنم، شكل درست به اين صورت هست:



$xml->person

نبايد در اشاره گر از المنت Root سند استفاده ميكردم چون در واقع كار عبثي هم هست، بايد از شاخه هاي سند شروع به آدرس دهي ميكردم. تنها مورد اشتباه همين بود و بقيه ي اسكريپت مثل قبلش هست.