10
votes

Vérifiez que l'existence de la propriété sans obtenir "noeud n'existe plus" AVERTISSEMENT

J'utilise simplexml. Si l'entrée de l'utilisateur sur ma fonction est invalide, ma variable $ x code> est un objet SimplexMlelLElement vide; Sinon, il a une propriété peuplée x-> station code>. Je veux vérifier si station code> existe.

function crazy_error($errno, $errstr, $errfile, $errline) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}

...

    private function parse_weather_xml() {
        set_error_handler('crazy_error');
        $x = $this->weather_xml; 
        if(!property_exists($x, 'Station')) {
            return FALSE;
        }
        restore_error_handler();

        ...
    }


6 commentaires

Je ne vérifierai probablement pas ce post jusqu'à ce qu'il soit environ 15 heures; Je ne veux plus regarder ce problème stupide aujourd'hui.


Vous dites que vous voulez ignorer l'erreur, pourtant vous le jeter et ne pas l'attraper ... je pourrais avoir tort mais ...


Je ne pouvais pas être sûr sans le contexte du code, mais je soupçonne que SimplexML se plaint de savoir que $ x (alias $ ceci-> weather_xml ) n'est pas défini, pas qu'il ne contient pas de gare nœud.


@Imsop il est défini; C'est un objet SimplexML vide. Voir ma deuxième phrase ci-dessus. Une bonne pensée, mais déjà comptabilisée.


S'il vous plaît considérer pour accepter une réponse (cliquez sur Cocher Mark à gauche) si cela répondit à votre question.


Je reçois le même problème ici, avez-vous trouvé une solution à la fin? @ 75thtrombone


4 Réponses :


1
votes

Voulez-vous vérifier si votre SimplexML code> contient un certain nœud ou non? -> Comptez-les!

Edit: Erreurs lorsque le nœud n'existe pas -> Essayez XPath: P>

... $xml->something->station->Count();


4 commentaires

Notez que $ xml-state-> comptez () (ou -> comptez () ?) Peut être plus idiomatiquement écrit comme compteur ($ xml-gare) . Simplexml est sympa comme ça.


Malheureusement, cela renvoie la même erreur. Avertissement: Compte (): Le nœud n'existe plus dans WeatherData-> parse_weather_xml () (ligne 183 de vvdtn.inc) . J'ai réussi à obtenir plus d'erreurs comme celle-ci des fonctions non liées à proximité, alors j'ai abandonné et déplacé ma logique à une fonction antérieure, où le XML est initialement récupéré. Tout semble fonctionner maintenant, donc cette question est maintenant purement académique.


@Michi pour -> xpath () vous ne peut pas utiliser -> comptez () - il renvoie un tableau PHP ordinaire. (Je pense que le principe est que c'est comme un ensemble de résultats de recherche dans tout le document, tandis que les objets SimplexML représentent toujours une section contiguë du document XML)


@Imsop Ok, je me débats avec ce sujet, l'esprit en regardant cela? Stackoverflow.com/ Questions / 15167074 / ...



0
votes
if (!$x || !$x->Station) {
    return false;
}
Important thing - !$x - you need check this xml object for empty. If it is true then on any try resolve $x->Station you can get this error.

0 commentaires

0
votes

Vérifiez d'abord si par erreur Vous avez essayé d'accéder à une propriété sans vérifier avant le bit du code que vous essayez de vérifier (parfois le message d'erreur n'est pas précis avec les numéros de ligne).

Puis j'ai utilisé Isset et ça marche Fine: xxx


0 commentaires

0
votes

Avez-vous essayé Property_exists () CODE>?

As opposed with isset(), property_exists() returns TRUE even if the property has the value NULL.


0 commentaires