2010-05-12 5 views
3

Juste essayer de comprendre une courte façon de le faire:SimpleXMLElement obtenir la première XPath élément dans une ligne

J'utilise SimpleXMLElement pour analyser un fichier xml et il y a aggravante d'avoir à appeler deux lignes pour traiter un tableau lorsque Je sais quel nœud je veux.

Code actuel:

$xml = new SimpleXMLElement($data); 
$r = $xml->xpath('///givexNumber'); 
$result["cardNum"] = $r[0]; 

Ce que je voudrais faire serait quelque chose comme je peux le faire avec DomX

$result["cardNum"] = $xml->xpath('///givexNumber')->item(0)->nodeValue; 
+0

connexes: [En ne sélectionnant que le premier élément d'un ensemble de résultats xpath en PHP] (http: // stackoverflow.com/questions/2778146/selection-only-the-first-item-of-an-xpath-result-set-in-php) (pour accéder au premier élément * directement *, ne pas le stocker dans une variable comme ici) – hakre

Répondre

1

Je ne sais pas php trop bien, mais ne doit pas:

$result["cardNum"] = (new SimpleXMLElement($data))->xpath('///givexNumber')[0] 

être le même que

$xml = new SimpleXMLElement($data); 
$r = $xml->xpath('///givexNumber'); 
$result["cardNum"] = $r[0]; 

Édition juil 2013: Oui, c'est le cas depuis PHP 5.4. Avec la petite correction, j'ai ajouté. Cela signifie que toutes les versions stables (non-fin-de-vie) de PHP supportent cela maintenant.

+1

On pourrait penser. Mais $ r = $ xml-> xpath ('/// givexNumber') [0] ne fonctionne pas. –

1

En PHP < 5.4 (qui soutient tableau déréférencer le résultat d'un appel de fonction ou méthode), vous pouvez accéder au premier élément soit avec l'aide de list:

list($result["cardNum"]) = $xml->xpath('//givexNumber'); 

Depuis PHP 5.4, il est plus direct avant avec:

$result["cardNum"] = $xml->xpath('//givexNumber')[0]; 

Prenez soin que ces travaux ne sans avis si la méthode XPath retourne un tableau avec au moins un élément. Si vous n'êtes pas sûr de cela et que vous avez besoin d'une valeur par défaut, ceci peut être réalisé en utilisant l'opérateur union de la baie.

En PHP < 5.4 le code qui a la valeur de retour par défaut de NULL serait:

list($result["cardNum"]) = $xml->xpath('//givexNumber[1]') + array(NULL); 

Pour PHP 5.4+ il est similaire, ici un avantage est la nouvelle syntaxe de tableau juste avec des crochets:

list($result["cardNum"]) = $xml->xpath('//givexNumber[1]') + [NULL]; 

Voir aussi:


Note dans la marge: Parce que vous attendez qu'un seul élément, vous ne devriez pas retourner plus d'un par le XPath déjà:

$result["cardNum"] = $xml->xpath('//givexNumber[1]')[0]; 
               ### 
Questions connexes