12
votes

Vérifiez si le nœud XML existe dans PHP

J'ai cet objet de résultat SimplexML:

 function xml_child_exists($xml, $childpath)
 {
    $result = $xml->xpath($childpath);
    if (count($result)) {
        return true;
    } else {
        return false;
    }
 }

 if(xml_child_exists($xml, 'THE_PATH')) //error
 {
  return false;
 }
 return $xml;


0 commentaires

4 Réponses :


0
votes

mettre * / problem_cause .


0 commentaires

37
votes

sonne comme un simple Isset () résout ce problème.

<?php
$s = new SimpleXMLElement('<foo version="1">
  <weather section="0" />
  <problem_cause data="" />
</foo>');
// var_dump($s) produces the same output as in the question, except for the object id numbers.
echo isset($s->problem_cause)  ? '+' : '-';

$s = new SimpleXMLElement('<foo version="1">
  <weather section="0" />
</foo>');
echo isset($s->problem_cause)  ? '+' : '-';


3 commentaires

Oh merci. C'est une solution très facile.


Il est préférable d'utiliser vide () que isset () . L'accès à un enfant de l'objet le créera s'il n'existe pas, alors SimplexMlelement retournera un élément vide et Isset () retournera true.


@ Mugomaj.okomba vide () retourne vrai même si le noeud existe mais n'a pas de contenu



3
votes

Utilisation du code que vous avez affiché, cet exemple doit fonctionner pour trouver le nœud problem_cause à une profondeur.

function xml_child_exists($xml, $childpath)
{
    $result = $xml->xpath($childpath); 
    return (bool) (count($result));
}

if(xml_child_exists($xml, '//problem_cause'))
{
    echo 'found';
}
else
{
    echo 'not found';
}


0 commentaires

1
votes

Essayez ceci: XXX

J'espère que cela vous aidera ..


0 commentaires