PHP – Accede al primer índice de matriz de la función SimpleXML :: xpath

Estoy usando SimpleXML para obtener un elemento de un objeto XML especificado por nombre de etiqueta y atributo … de la siguiente manera:

$result = $xml->xpath('Stat[@Type="Venue"]'); $venue = $result[0]; 

Esto funciona bien

Sin embargo … el siguiente acortamiento me da un error

 $venue = $xml->xpath('Stat[@Type="Venue"]')[0]; PHP Parse error: syntax error, unexpected '[' in /var/www/handler.php on line 10 

Tengo que estar siendo estúpido … pero parece que no puedo resolver esto.

No puedes usar una matriz como esa. Tienes que pasarlo a una variable como tal

 $venue = $xml->xpath('Stat[@Type="Venue"]'); echo $venue[0]; 

Creo que en PHP 5.4 tendrás la posibilidad de acceder a la matriz desde objetos, pero no me cites sobre eso.

Editar: Lo siento, copié y pegué el código del OP. [0] se me escapó de mi radar!

Nuevas características PHP 5.4.0

Se ha agregado la desreferenciación de la matriz de funciones, por ejemplo, foo () [0].

Use PHP 5.4.0 o superior.

Bien, hay un par de formas de hacer esto, además de cómo sugirió Eli . La primera y más fácil de implementar es usar current (). Encontré esto en una publicación similar aquí , así que no me puedo atribuir el mérito de esto 🙂

 $vanue = current(($xml->xpath('Stat[@Type="Venue"]'))); 

La segunda solución es usar una consulta XPATH. La única razón para usar una consulta sobre xpath es si necesita evaluar una expresión. Todo lo que puedo encontrar dice que esto también debería funcionar para usted, pero como dije, no es necesario y puede que ni siquiera funcione con su versión de PHP. Sé que no funciona con el mío, así que obviamente no pude probarlo.

 $doc = new DOMDocument; $doc->Load($file); $xpath = new DOMXPath($doc); $query = 'Stat[@Type="Venue"]'; $venue = $xpath->query($query)->item(0);