PDA

View Full Version : مشکل در خواندن string



computer-mag
دوشنبه 18 اسفند 1393, 15:43 عصر
سلام
من به وب سرویسی متصل میشم که خروجی ای که به من میده یک stringهست که هرکاری کردم به XML تبدیل نشد خروجی دقیقا به شکل زیر هستش


<ServicesList>
<Service>
<token>11838-78</token>
<coName>ایران غرب</coName>
<Service_No>1181</Service_No>
<Depart_Date>01/03/1394</Depart_Date>
<Depart_Time>07:30</Depart_Time>
<Bus_Type>تسترز۴۵</Bus_Type>
<srcCityName>تهران</srcCityName>
<desCityName>اصفهان</desCityName>
<cnt>45</cnt>
<Price>75000</Price>
</Service>
<Service>
<token>11838-79</token>
<coName>ایران شرق</coName>
<Service_No>1192</Service_No>
<Depart_Date>01/03/1394</Depart_Date>
<Depart_Time>08:30</Depart_Time>
<Bus_Type>تسترز۴8</Bus_Type>
<srcCityName>شیراز</srcCityName>
<desCityName>آمل</desCityName>
<cnt>45</cnt>
<Price>75000</Price>
</Service>
</ServicesList>


میخواستم ببینم چجوری میتونم این متن رو بخونم و به اطلاعات بین تگها و تعداد تکرار تگها دست رسی داشته باشم؟

پیشاپیش از راهنماییتون متشکرم

rambod18
دوشنبه 18 اسفند 1393, 16:09 عصر
فکر می کنم لینک زیر کمکتون کنه
http://stackoverflow.com/questions/17917539/read-xml-file-with-php
http://www.w3schools.com/php/php_xml_simplexml_read.asp

computer-mag
دوشنبه 18 اسفند 1393, 16:25 عصر
فکر می کنم لینک زیر کمکتون کنه
http://stackoverflow.com/questions/17917539/read-xml-file-with-php
http://www.w3schools.com/php/php_xml_simplexml_read.asp

ممنونم من قبلا وب سرویس دیگه ای رو این مدلی که در زیر میارم میگرفتم XML میکردم و ازش استفاده میکردم، اما این خروجی که خودش استایل XML داره ولی استرینگ هست با کدی که من تبدیل میکنم به XML تبدیل نمیشه که بتوم بخونمش کدی که من XML میکنم در زیر اومده:




$client = new SoapClient('webserviceAddress');
$response = $client->getServices(
array(
'param1' => 1,

)
);


$arr = json_encode($response, true);
$hotelsListArray = json_decode($arr, TRUE);




//سمت سرور باس اینو برش دارم
require_once '\bin\php\php5.3.13\pear\XML\Serializer.php';


$serializer = new XML_Serializer();
if ($serializer->serialize($hotelsListArray)) {
$serialzData = $serializer->getSerializedData();
}
$xml = simplexml_load_string($serialzData);




به نظرتون چیکارش کنم

rambod18
دوشنبه 18 اسفند 1393, 16:40 عصر
یک بار بدون encode کردن به جیسون فقط دیکد کنید.
یک بار هم کلا جیسون نکنید فقط سریالایز کنید.
به ذهنم این رسید

computer-mag
دوشنبه 18 اسفند 1393, 16:50 عصر
یک بار بدون encode کردن به جیسون فقط دیکد کنید.
یک بار هم کلا جیسون نکنید فقط سریالایز کنید.
به ذهنم این رسید

ممنونم از پیگیریتون، بدون encode که نمیشه چون decode دیتای encode شده میخاد حتما
ولی در صورتی که سریالایز بدون جیسون صورت بگیره ، خروجی پس از ذخیره در فایل به شکل فایلی هست که نمیشه ازش XML وار استفاده کرد اینه خروجیش که سرویس لیستها رو کلا استرینگ میکنه و میریزه توی یک نود از XML



<stdClass><output><ServicesList><Service><token>11838-78</token><coName>گيتى پيما پايانه غرب</coName><Service_No>1181</Service_No><Depart_Date>01/03/1394</Depart_Date><Depart_Time>07:30</Depart_Time><Bus_Type>اسکانیا ۴۵</Bus_Type><srcCityName>تهران</srcCityName><desCityName>اصفهان</desCityName><cnt>45</cnt><Price>75000</Price><SiteIdCode>Payaneh.ir</SiteIdCode></Service>
<Service><token>11838-78</token><coName>گيتى پيما پايانه غرب</coName><Service_No>890</Service_No><Depart_Date>01/03/1394</Depart_Date><Depart_Time>13:00</Depart_Time><Bus_Type>مان</Bus_Type><srcCityName>تهران</srcCityName><desCityName>اصفهان</desCityName><cnt>38</cnt><Price>75000</Price><SiteIdCode>Payaneh.ir</SiteIdCode></Service>
<Service><token>11838-78</token><coName>گيتى پيما پايانه غرب</coName><Service_No>1763</Service_No><Depart_Date>01/03/1394</Depart_Date><Depart_Time>20:00</Depart_Time><Bus_Type>ولوو ‌‌‌‌B12</Bus_Type><srcCityName>تهران</srcCityName><desCityName>اصفهان</desCityName><cnt>42</cnt><Price>75000</Price><SiteIdCode>Payaneh.ir</SiteIdCode></Service>
<Service><token>11838-78</token><coName>گيتى پيما پايانه غرب</coName><Service_No>1472</Service_No><Depart_Date>01/03/1394</Depart_Date><Depart_Time>21:30</Depart_Time><Bus_Type>ولوو تی ایکس</Bus_Type><srcCityName>تهران</srcCityName><desCityName>اصفهان</desCityName><cnt>42</cnt><Price>75000</Price><SiteIdCode>Payaneh.ir</SiteIdCode></Service>
</ServicesList></output></stdClass>

rambod18
دوشنبه 18 اسفند 1393, 17:09 عصر
منظورم اینه که خروجی خودش xml هست. با همون متغیر response مثل خود xml رفتار کنید تو برنامتون

computer-mag
دوشنبه 18 اسفند 1393, 17:19 عصر
منظورم اینه که خروجی خودش xml هست. با همون متغیر response مثل خود xml رفتار کنید تو برنامتون
نه response خودش Object هست از نوع stdClass که XML نیست ظاهرهش گول میزنه آدمو :(

rambod18
دوشنبه 18 اسفند 1393, 17:27 عصر
کلاسی که توی این لینک هست object رو به xml و برعکس تبدیل میکه
http://www.akchauhan.com/php-class-for-converting-xml-to-object-and-object-to-xml/

computer-mag
دوشنبه 18 اسفند 1393, 17:49 عصر
کلاسی که توی این لینک هست object رو به xml و برعکس تبدیل میکه
http://www.akchauhan.com/php-class-for-converting-xml-to-object-and-object-to-xml/


خروجیم این شد :(




<string><?xml version="1.0"?>
<output>&lt;ServicesList&gt;&lt;Service&gt;&lt;token&gt;11838-78&lt;/token&gt;&lt;coName&gt;گيتى پيما پايانه غرب&lt;/coName&gt;&lt;Service_No&gt;1181&lt;/Service_No&gt;&lt;Depart_Date&gt;01/03/1394&lt;/Depart_Date&gt;&lt;Depart_Time&gt;07:30&lt;/Depart_Time&gt;&lt;Bus_Type&gt;اسکانیا ۴۵&lt;/Bus_Type&gt;&lt;srcCityName&gt;تهران&lt;/srcCityName&gt;&lt;desCityName&gt;اصفهان&lt;/desCityName&gt;&lt;cnt&gt;45&lt;/cnt&gt;&lt;Price&gt;75000&lt;/Price&gt;&lt;SiteIdCode&gt;Payaneh.ir&lt;/SiteIdCode&gt;&lt;/Service&gt;
&lt;Service&gt;&lt;token&gt;11838-78&lt;/token&gt;&lt;coName&gt;گيتى پيما پايانه غرب&lt;/coName&gt;&lt;Service_No&gt;890&lt;/Service_No&gt;&lt;Depart_Date&gt;01/03/1394&lt;/Depart_Date&gt;&lt;Depart_Time&gt;13:00&lt;/Depart_Time&gt;&lt;Bus_Type&gt;مان&lt;/Bus_Type&gt;&lt;srcCityName&gt;تهران&lt;/srcCityName&gt;&lt;desCityName&gt;اصفهان&lt;/desCityName&gt;&lt;cnt&gt;38&lt;/cnt&gt;&lt;Price&gt;75000&lt;/Price&gt;&lt;SiteIdCode&gt;Payaneh.ir&lt;/SiteIdCode&gt;&lt;/Service&gt;
&lt;Service&gt;&lt;token&gt;11838-78&lt;/token&gt;&lt;coName&gt;گيتى پيما پايانه غرب&lt;/coName&gt;&lt;Service_No&gt;1763&lt;/Service_No&gt;&lt;Depart_Date&gt;01/03/1394&lt;/Depart_Date&gt;&lt;Depart_Time&gt;20:00&lt;/Depart_Time&gt;&lt;Bus_Type&gt;ولوو ‌‌‌‌B12&lt;/Bus_Type&gt;&lt;srcCityName&gt;تهران&lt;/srcCityName&gt;&lt;desCityName&gt;اصفهان&lt;/desCityName&gt;&lt;cnt&gt;42&lt;/cnt&gt;&lt;Price&gt;75000&lt;/Price&gt;&lt;SiteIdCode&gt;Payaneh.ir&lt;/SiteIdCode&gt;&lt;/Service&gt;
&lt;Service&gt;&lt;token&gt;11838-78&lt;/token&gt;&lt;coName&gt;گيتى پيما پايانه غرب&lt;/coName&gt;&lt;Service_No&gt;1472&lt;/Service_No&gt;&lt;Depart_Date&gt;01/03/1394&lt;/Depart_Date&gt;&lt;Depart_Time&gt;21:30&lt;/Depart_Time&gt;&lt;Bus_Type&gt;ولوو تی ایکس&lt;/Bus_Type&gt;&lt;srcCityName&gt;تهران&lt;/srcCityName&gt;&lt;desCityName&gt;اصفهان&lt;/desCityName&gt;&lt;cnt&gt;42&lt;/cnt&gt;&lt;Price&gt;75000&lt;/Price&gt;&lt;SiteIdCode&gt;Payaneh.ir&lt;/SiteIdCode&gt;&lt;/Service&gt;
&lt;/ServicesList&gt;</output>
</string>

rambod18
دوشنبه 18 اسفند 1393, 18:06 عصر
یا چیز دیگه ای به ذهنم نمیرسه فعلا:خجالت:

rambod18
دوشنبه 18 اسفند 1393, 18:12 عصر
اینم امتحان کن
http://php.net/manual/en/function.get-object-vars.php

computer-mag
دوشنبه 18 اسفند 1393, 18:33 عصر
اینم امتحان کن
http://php.net/manual/en/function.get-object-vars.php

بعضی از برنامه نویس ها و باید زنده زنده تو آتیش سوزوند! مشکلش این بود که تو خروجی که میداد < و > صورت کد HTML بود نه کاراکتر که با این Replace کردنها مشکل حل شد! بهش که میگم میخنده میگه آخه خروجیمو Encoding رو رعایت نکرده بودم!



$t1=str_replace('&gt;', '>', $serialzData);
$t2=str_replace('&lt;', '<', $t1);
$xml = simplexml_load_string($t2);