Bir çocuk varsa php SimpleXML kontrol

9 Cevap php

A-> b-> c var olabilir, ancak c mevcut olmayabilir. Bunu nasıl kontrol edebilirim?

9 Cevap

if($A->b->c != null) //c exists

C mevcut değilse bu değer null olur (veya daha kesin, hiç bir değere sahip olacaktır) notu ancak o A ve b hem de (aksi php (bence, oldukça bir hata atar boş olamaz gerekir bu iş için Emin))

Bir isset() bu sarmak için daha iyi olabilir

if(isset($A->b->c)) { // c exists

Bu şekilde $A veya $A->b yokmuş ... o kadar darbe değildir.

Her nesne döndürür SimpleXML. Hiçbir çocuğun varsa, boş bir nesne döndürülür.

if( !empty($a->b)){
  var_dump($a->b);
}

Ben children() işlevini kullanarak ve bunun üzerine bir count() yaptığını, hiçbir çocuk sayısı-çağrısından önce bir @ koyarak varsa bir PHP hatası yok sayarak bunu çözdü. Bu aptalca, ama çalışıyor:

$identification = $xml->identification;
if (@count($identification->children()) == 0)
  $identification = $xml->Identification;

Bundan nefret ediyorum ...

Eşleşen öğeleri veya yanlış yöntemi xpath döner dizi

if(false !== $A->xpath('b/c')) { ...

http://www.php.net/manual/ru/simplexmlelement.xpath.php

Eğer deneyebilirsiniz:

if($A->b->c && $A->b->c != '')

PHP 5.3 varsa, sadece kullanabilirsiniz $a->count(). Aksi takdirde kullanan scippie çözeltisi @count($a->children()) iyi çalışır. Ben @ gerek yok ama eski PHP uygulamaları ihtiyacınız olabilir bulmak.

Bazı denemeler sonra, ben bir düğüm varsa kontrol tek güvenilir yöntem kullanıyor olduğunu keşfetti ettik count($xml->someNode).

Burada bir test vakası: https://gist.github.com/Thinkscape/6262156

Benim deneyim paylaşmak düşündüm. 5.4 üzerinde çalışan ben 'isset' ve 'boş' ile test denedim ama hiçbiri benim için çalıştı. I is_null kullanarak sona erdi.

if(!is_null($xml->scheduler->outterList->innerList)) {
    //do something
}