65 votes

php SimpleXML vérifier si un enfant existent

A->b->c peut exister, mais c peut ne pas exister. Comment puis-je le vérifier?

133voto

null Points 3159

Il peut être préférable de les envelopper dans un isset()

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

De cette façon, si $A ou $A->b n'existe pas... il ne fait pas exploser.

41voto

CedCannes Points 159

SimpleXML toujours l'Objet de retour. Si il n'y a pas d'enfant, objet vide est retournée.

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

8voto

scippie Points 528

Je l'ai résolu en utilisant l' children() de la fonction et de faire une count() sur, en ignorant une erreur PHP si il n'y a pas d'enfants en mettant un @ avant le décompte appel. C'est bête, mais ça marche:

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

Je déteste ce...

8voto

Artur Bodera Points 503

Après quelques essais, j'ai découvert que le seul moyen fiable de vérifier si un nœud existe, c'est à l'aide de count($xml->someNode).

Voici un cas de test: https://gist.github.com/Thinkscape/6262156

3voto

user1391077 Points 11

Méthode xpath retourne un tableau de correspondance des éléments ou faux

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X