Cara mem-parsing respons xml dari layanan web sabun di php

Saya melakukan panggilan SOAP melalui php ke layanan web eksternal. Saya akhirnya membuatnya bekerja. Langkah terakhir hanya mem-parsing respons dari layanan SOAP

Ketika saya melakukannya

echo '{"reference": "'.$client->__getLastResponse().'", "success":"true"}';

Saya berharap mendapatkan dan saya melihat sebagai respons halaman web HTML

{"reference": "000002R5281191606961", "success":"true"}
_

Namun ketika saya melihat sumber/pratinjau alat pengembang saya melihat ini

{"reference": "<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetPaynetReferenceResponse xmlns="http://www.paynet.com.mx/"><GetPaynetReferenceResult><RespCode>0</RespCode><RespDesc /><PaynetReference>00002R5281191606961</PaynetReference></GetPaynetReferenceResult></GetPaynetReferenceResponse></soap:Body></soap:Envelope>", "success":"true"} 

Cukup banyak variabel yang saya butuhkan ada di tengah banyak hal XML. Bagaimana saya bisa mengeluarkan variabel yang diperlukan, dan mengembalikannya sebagai json?

XML DOM (Document Object Model) mendefinisikan properti dan metode untuk mengakses dan mengedit XML

Namun, sebelum dokumen XML dapat diakses, dokumen tersebut harus dimuat ke dalam objek XML DOM

Semua browser modern memiliki parser XML bawaan yang dapat mengonversi teks menjadi objek XML DOM


Mem-parsing String Teks

Contoh ini mengurai string teks menjadi objek XML DOM, dan mengekstrak info darinya dengan JavaScript

Saya berurusan dengan respon klien SOAP untuk aplikasi pemesanan penerbangan, saya berhasil mendapatkan respon, Lihat respon di bawah ini

<arzoo__response>
<Response__Depart>
    <OriginDestinationOptions>
        <OriginDestinationOption>
            <FareDetails>
                <ChargeableFares>
                    <ActualBaseFare>4850</ActualBaseFare>
                    <Tax>4267</Tax>
                    <STax>31</STax>
                    <SCharge>0</SCharge>
                    <TDiscount>0</TDiscount>
                    <TPartnerCommission>0</TPartnerCommission>
                </ChargeableFares>
                <NonchargeableFares>
                    <TCharge>0</TCharge>
                    <TMarkup>0</TMarkup>
                    <TSdiscount>0</TSdiscount>
                </NonchargeableFares>
            </FareDetails>
            <FlightSegments>
                <FlightSegment>
                    <AirEquipType>321</AirEquipType>
                    <ArrivalAirportCode>DEL</ArrivalAirportCode>
                    <ArrivalDateTime>2013-05-20T08:00:00</ArrivalDateTime>
                    <DepartureAirportCode>BOM</DepartureAirportCode>
                    <DepartureDateTime>2013-05-20T06:00:00</DepartureDateTime>
                    <FlightNumber>601</FlightNumber>
                    <OperatingAirlineCode>AI</OperatingAirlineCode>
                    <OperatingAirlineFlightNumber>601</OperatingAirlineFlightNumber>
                    <RPH></RPH>
                    <StopQuantity>0</StopQuantity>
                    <airLineName>Air India</airLineName>
                    <airportTax>4267</airportTax>
                    <imageFileName>http://live.arzoo.com/FlightWS/image/AirIndia.gif</imageFileName>
                    <viaFlight></viaFlight>
                    <BookingClass> 
                        <Availability>4</Availability>
                        <ResBookDesigCode>U</ResBookDesigCode>
                    </BookingClass>
                    <BookingClassFare>
                        <adultFare>4850</adultFare>
                        <bookingclass>U</bookingclass>
                        <classType>Economy</classType>
                        <farebasiscode>fjyS3YyUlEusLfJ4bwgPvQ==</farebasiscode>
                        <Rule>This fare is Refundable &lt;br&gt; Baggage : 25K&lt;br&gt;Booking Class : U|Re-Schedule Charges: Rs. 750 per sector + Fare difference (If any) +admin fee 500 + Service Fee of Rs. 250 Sector .|Cancellation Charges : Basic fare +Airline administration fee 500 + Service Charges 250 Per Passenger Per Sector . |</Rule>
                        <adultCommission>0</adultCommission>
                        <childCommission>0</childCommission>
                        <commissionOnTCharge>0</commissionOnTCharge>
                    </BookingClassFare>
                    <Discount>0</Discount>
                    <airportTaxChild>0</airportTaxChild>
                    <airportTaxInfant>0</airportTaxInfant>
                    <adultTaxBreakup>2800,147,1320</adultTaxBreakup>
                    <childTaxBreakup>0,0,0</childTaxBreakup>
                    <infantTaxBreakup>0,0,0</infantTaxBreakup>
                    <octax>0</octax>
                </FlightSegment> 
            </FlightSegments>
            <id>arzoo11</id>
            <key>wtZcSVMY/gphWFSOTFWg8oKRnosq3p9wt7R4SjMB0EUK8sDjVS91GicTJzH+TWN+pNURIyTJYKOW O8yH8+0tzpA4t8aEEvzaOE6ZnTtBotFDwLtSiN0xXqMsaDl8diV51l7d9ata/3rxTgfh9d8ZSmFY VI5MVaDywdHNcjAR1vwnEycx/k1jftlsnmWWqYGnJxMnMf5NY36YIq2FtLkfcHtsd+IDEhxpxJuT v4YyS+QnEycx/k1jftlsnmWWqYGnJxMnMf5NY37ZbJ5llqmBpycTJzH+TWN+GlZsae+KA6L3dlms eLkXZFKXPvd5FAnBXnTfRGc5sz+UC8CsZNzDV2FYVI5MVaDyFiThuG7WKPhzqWDbQb1E1IqUKT5I FtF6OaCYjb6EFGhDwLtSiN0xXt7N3OmPGVH2v18OFlhFoI+A/uAfnTovYr9fDhZYRaCPgP7gH506 L2K/Xw4WWEWgj4D+4B+dOi9iv18OFlhFoI+A/uAfnTovYr9fDhZYRaCPgP7gH506L2K/Xw4WWEWg j4D+4B+dOi9iv18OFlhFoI/87KPqwdBsCm4nF4DlZwRNQ/zni8QE42g8S0GV1z3SJXaOdoTFisn9 v18OFlhFoI+ThOYsjNAbXEP854vEBONoPEtBldc90iVD/OeLxATjaAwTg0ygCEBmEgnKEhG4Md1D /OeLxATjaDxLQZXXPdIlQ/zni8QE42jXGTnbB/ydvR4daAuN34kWYVhUjkxVoPJtRWbi6bZrXL9f DhZYRaCPgP7gH506L2K/Xw4WWEWgj4D+4B+dOi9iv18OFlhFoI8KriAmVoEyR3OpYNtBvUTUp1Mf I240+obPusGaAOeuxg==</key>
        </OriginDestinationOption>
    </OriginDestinationOptions>
</Response__Depart>
</arzoo__response>

Sekarang saya harus menampilkannya sebagai

Harga dasar. 4850
Pajak. 31
STax. 31
Isi daya. 0
Diskon. 0
TPartnerCommission. 0
.....................
Kode Bandara Kedatangan. DEL
.....................

Saya mencoba beberapa metode menggunakan

   $result = $client->__call('getAvailability',array($test));   
   $xml = simplexml_load_string($result);
    foreach($xml->OriginDestinationOption as $od){
        foreach($od->FareDetails as $fd){
            foreach($fd->ChargeableFares as $cf){
                echo $cf->ActualBaseFare;
            }
        }
    }
_3

   $result = $client->__call('getAvailability',array($test));   
   $xml = simplexml_load_string($result);
    foreach($xml->OriginDestinationOption as $od){
        foreach($od->FareDetails as $fd){
            foreach($fd->ChargeableFares as $cf){
                echo $cf->ActualBaseFare;
            }
        }
    }
_

tapi jangan pernah membocorkannya. Adakah yang bisa membantu saya dalam hal ini?
Bantuan Anda sangat kami hargai. Terima kasih sebelumnya

foreach-loop php sabun xml-parsing

0 0

Membagikan

  • 3 Kontributor
  • 6 Balasan
  • 8K Tampilan
  • 14 Jam Rentang Diskusi
  • Pos Terbaru Pos Terbaru oleh diafol

Jawaban yang Direkomendasikan

Dijawab oleh diafol 3.720 dalam

 foreach($xml->Response__Depart->OriginDestinationOptions->OriginDestinationOption as $od){
_

Dijawab oleh diafol 3.720 dalam

Bagaimana dengan ini?

   //$result = $client->__call('getAvailability',array($test)); //obviously I had to use your xml from above for this  
   $xml = simplexml_load_string($result);
    foreach($xml->Response__Depart->OriginDestinationOptions->OriginDestinationOption as $od){
        $abf = $od->FareDetails->ChargeableFares->ActualBaseFare;
        echo $abf;
    }

Can the contain more than one ?
Can the contain more than one ?

Semua 6 Balasan

Cara mem-parsing respons xml dari layanan web sabun di php

diafol

9 Tahun Lalu

 foreach($xml->Response__Depart->OriginDestinationOptions->OriginDestinationOption as $od){
_

0 0

Membagikan

Cara mem-parsing respons xml dari layanan web sabun di php

rayidi 3 Poster Cahaya

9 Tahun Lalu

Saya mencoba

    foreach($arr->Response__Depart->OriginDestinationOptions->OriginDestinationOption as $od){
        print_r($od);
    }
_

tapi itu memberikan kesalahan yang sama

Notice: Trying to get property of non-object in C:\xampp\htdocs\Flight\availability.php on line 36

Notice: Trying to get property of non-object in C:\xampp\htdocs\Flight\availability.php on line 36

Notice: Trying to get property of non-object in C:\xampp\htdocs\Flight\availability.php on line 36

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\Flight\availability.php on line 36

Garis (36) adalah

   $result = $client->__call('getAvailability',array($test));   
   $xml = simplexml_load_string($result);
    foreach($xml->OriginDestinationOption as $od){
        foreach($od->FareDetails as $fd){
            foreach($fd->ChargeableFares as $cf){
                echo $cf->ActualBaseFare;
            }
        }
    }
_4

0 0

Membagikan

Diedit 9 Tahun Lalu oleh rayidi

Cara mem-parsing respons xml dari layanan web sabun di php

Squidge 101 Poster Pemula

9 Tahun Lalu

Mengapa Anda menggunakan

   $result = $client->__call('getAvailability',array($test));   
   $xml = simplexml_load_string($result);
    foreach($xml->OriginDestinationOption as $od){
        foreach($od->FareDetails as $fd){
            foreach($fd->ChargeableFares as $cf){
                echo $cf->ActualBaseFare;
            }
        }
    }
5, variabel Anda adalah, seperti yang ditunjukkan Diafol ->
   $result = $client->__call('getAvailability',array($test));   
   $xml = simplexml_load_string($result);
    foreach($xml->OriginDestinationOption as $od){
        foreach($od->FareDetails as $fd){
            foreach($fd->ChargeableFares as $cf){
                echo $cf->ActualBaseFare;
            }
        }
    }
6

0 0

Membagikan

Cara mem-parsing respons xml dari layanan web sabun di php

diafol

9 Tahun Lalu

Bagaimana dengan ini?

   //$result = $client->__call('getAvailability',array($test)); //obviously I had to use your xml from above for this  
   $xml = simplexml_load_string($result);
    foreach($xml->Response__Depart->OriginDestinationOptions->OriginDestinationOption as $od){
        $abf = $od->FareDetails->ChargeableFares->ActualBaseFare;
        echo $abf;
    }

Can the contain more than one ?
Can the contain more than one ?
Can the contain more than one ?

Jika jawaban untuk semua pertanyaan itu adalah TIDAK, maka menurut saya kode saya seharusnya berfungsi

1 0

Membagikan

Diedit 9 Tahun Lalu oleh diafol

rayidi berkomentar. Yah. Ini berhasil. Terima kasih banyak. Anda adalah guru posting saya. Banyak belajar dari kalian +2

Cara mem-parsing respons xml dari layanan web sabun di php

rayidi 3 Poster Cahaya

9 Tahun Lalu

In my response contain only one
hanya berisi satu
Hanya berisi satu

Terima kasih banyak. -) Cinta kalian semua

0 0

Membagikan

Cara mem-parsing respons xml dari layanan web sabun di php

diafol

9 Tahun Lalu

Saya tahu ini sudah terpecahkan, tetapi saya pikir saya akan menambahkan sedikit sesuatu. Banyak yang menemukan data stdClass sulit untuk dilintasi, jadi saya pikir saya akan menyertakan skrip stdClass (Object) -> Multidimensional Array. Namun, pada pencarian cepat, saya menemukan satu di sini. http. // www. jika-tidak-benar-maka-salah. com/2009/php-tip-convert-stdclass-object-to-multidimensional-array-and-convert-multidimensional-array-to-stdclass-object/

function objectToArray($d) {
    if (is_object($d)) {
        $d = get_object_vars($d);
    }
    if (is_array($d)) {
        return array_map(__FUNCTION__, $d);
    }
    else {
        return $d;
    }
}

$p = objectToArray($xml);
echo "<pre>";
print_r($p);
echo "</pre>";

Jadi jika Anda ingin menangani output xml sebagai array multidimensi, ini harus dilakukan. Secara pribadi, saya tidak bisa melihat banyak perbedaan untuk pengambilan, tapi saya rasa, itu yang Anda suka

Bagaimana cara mem-parsing respons SOAP di PHP?

Cukup memanggil $xml->SOAP-ENV. Amplop akan menghasilkan kesalahan karena fakta bahwa tanda hubung dan titik dua bukan karakter yang valid untuk variabel atau metode objek. Setiap kali Anda memasukkan namespace baru, Anda dapat menggunakan SimpleXMLElement. children() untuk menentukan ruang nama .

Bagaimana cara mem-parsing XML dalam SOAP?

SOAP Parser membaca dan menulis dokumen SOAP XML . Parser mengonversi dokumen XML SOAP ke atau dari objek entri dengan cara yang sederhana dan lugas. Saat menulis dokumen XML, Parser menggunakan atribut dari entri untuk membuat dokumen.

Bagaimana cara mendapatkan data dari SOAP API di PHP?

getFunctions - Request API Functions The code below will display all possible API methods on the page. true , 'exceptions' => true , )); print_r($client->__getFunctions()); ?>

Bagaimana cara mendapatkan respons XML dari REST API di PHP?

Untuk mengambil XML dari server menggunakan PHP, Anda perlu mengirim permintaan GET dan menentukan "Accept. application/xml" tajuk HTTP dalam permintaan . Header Terima memberi tahu server bahwa klien mengharapkan data XML. Tanpa header ini, server dapat mengembalikan data dalam format yang berbeda.