2010-01-25 5 views

Répondre

2

Je ne suis pas à familiariser avec PHP, mais vous pouvez essayer ce qui suit, en utilisant une requête XPath:

foreach ($xml->xpath("//gig[last()]")[0]->attributes() as $Id){ 
} 
+0

Malheureusement, le déréférencement de tableaux comme ça ('func() [0]') n'est pas une syntaxe PHP valide (au moment de l'écriture). Pour conserver le one-liner, la fonction 'current' pourrait être utilisée (en supposant qu'il y ait toujours au moins un noeud' gig'). L'OP veut aussi le dernier concert qui soit un enfant immédiat du nœud racine (ou du moins c'est ce que l'on veut). – salathe

+0

@salathe: Ah, merci pour le conseil. Ce n'est pas mon langage naturel ;-) –

1

Pour obtenir le dernier noeud gig, comme Frank Bollack noté, nous pourrions utiliser XPath.

foreach (current($xml->xpath('/*/gig[last()]'))->attributes() as $attr) { 
} 

Ou un peu plus bavard, mais plus agréable:

$attrs = array(); 
$nodes = $xml->xpath('/*/gig[last()]'); 
if (is_array($nodes) && ! empty($nodes)) { 
    foreach ($nodes[0]->attributes() as $attr) { 
     $attrs[$attr->getName()] = (string) $attr; 
    } 
} 
var_dump($attrs); 
+0

foreach (current ($ xml-> xpath ('/ */gig [dernier()]')) -> attributes() as $ attr) { } affiche uniquement le attribut du premier noeud pas le dernier. –

+0

À moins que le premier nœud ne soit aussi le dernier, ou que votre définition du dernier diffère du mien, il se passe quelque chose d'étrange. Nous demandons explicitement le dernier noeud de concert dans l'expression XPath. – salathe

1

Il est vrai que vous pouvez utiliser XPath pour obtenir le dernier nœud (que ce soit un nœud <gig/> ou autre), mais vous pouvez également refléter la même technique que vous avez utilisée pour le premier noeud. De cette façon:

// first <gig/> 
$xml->gig[0] 

// last <gig/> 
$xml->gig[count($xml->gig) - 1] 

Edit: Je viens de réaliser, que vous essayez simplement d'obtenir l'attribut @id du premier et le dernier noeud <gig/>? Dans ce cas, oubliez attributes() et utilisez plutôt la notation de SimpleXML: les attributs sont accédés comme s'ils étaient des clés de tableau.

$first_id = $xml->gig[0]['id']; 
$last_id = $xml->gig[count($xml->gig) - 1]['id']; 
0

Je pense que cette expression XPath doit travailler

$xml->xpath('root/child[last()]'); 

Cela devrait récupérer le dernier élément enfant qui est un enfant de l'élément racine.

Questions connexes