Bir SimpleXMLElement nesnesi ürün alma

1 Cevap php

Başka bir etiket iç içe bir etiket yoktu, ben ne söyleyebilirim Gönderen, bir SimpleXMLElement tıpkı diğer SimpleXMLElement bir dizi, artı bazı düzenli dizisi değerleridir.

I $data bir değişken bir SimpleXMLElement var, ve var_dump($data) bana bu verir:

object(SimpleXMLElement)#1 (33) {
  ["buyer-accepts-marketing"]=>
  string(4) "true"
...
...

ancak çağıran var_dump($data->buyer-accepts-marketing) bana bir hata veriyor, ve var_dump($data["buyer-accepts-marketing"]) bana null verir. Arayan var_dump($data->shipping-address->children()) bana bir hata verir.

Bu böyle devam:

foreach($data as $item) {
    var_dump($item);
}

bir bütün SimpleXMLElement nesnelerin demet, ama hiçbir dizeleri veya ints, işin garibi verir.

Ben burada ne eksik? Ben belirli bölümlerini alıp fonksiyon onları geçmek istiyorum, böylece, örneğin, ben gitmek zorunda değilsiniz

$data->billing-address->postal-code;

...

$data->shipping-address->postal-code;

...

ve sadece gidebilir

address($data->billing-address);
address($data->shipping-address);

vb

1 Cevap

SimpleXMLElement not sadece bir dizidir. Alt öğeleri erişmek için, ($a->b) nesne gösterimini kullanmanız gerekir ve dizi gösterimini kullanmanız gerekir niteliklerine erişmek için ($a['b']).

Sorun nesne gösterimi ile, geçerli etiket isimleri yasadışı PHP kodu olabilir, olduğunu.

Bunu yapmanız gerekir:

$data->{'buyer-accepts-marketing'};

Bu bir SimpleXMLElement döndüren unutmayın! Bunun nedeni, sadece metin, daha fazla alt elemanlar, ya da her ikisini birden içerebilir olmasıdır. Çıkış var_dump() SimpleXMLElement için çok yanıltıcı. Tek <buyer-accepts-marketing> etiketinin metin içeriğine istiyorsanız, bunu yapmak zorunda:

(string)$data->{'buyer-accepts-marketing'};

Tabii bunu yapmak için de tamamen yasaldır:

(int)$data->{'buyer-accepts-marketing'};

Bu (böyle bir SimpleXMLElement ing {[) 0 (]} gibi) bazı durumlarda işe görünür nedeni türü dönüştürmeleri örtük ve otomatik olmasıdır. PHP otomatik olarak bir dizeye dönüştürür, böylece echo bir nesne olamaz.

Ben SimpleXML ile bir aşk / nefret ilişkisi var. Bu işler çok easy anlamak sonra complex gerçek API nasıl yapar.

Bunun üzerine iyi bir kolu almak için sözde "basic" örnekler kadar okuyun.