PHP - Доступ к первому индексу массива функции SimpleXML :: xpath - PullRequest
0 голосов
/ 13 марта 2012

Я использую SimpleXML, чтобы получить элемент объекта XML, заданный именем тега и атрибутом ... следующим образом:

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

Это отлично работает.

Однако ... следующее сокращение дает мне ошибку

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

PHP Parse error:  syntax error, unexpected '[' in /var/www/handler.php on line 10

Я должен быть глупым ... но я не могу понять это.

Ответы [ 3 ]

2 голосов
/ 13 марта 2012

Вы не можете использовать такой массив. Вам нужно передать его в переменную, например,

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

Я думаю, что в PHP 5.4 у вас будет возможность доступа к массиву из объектов, но не указывайте меня на этом.

Редактировать: Извините, я скопировал и вставил код из ОП. [0] выскользнул из моего радара!

0 голосов
/ 19 марта 2013

Новые функции PHP 5.4.0

Добавлено разыменование массива функций, например, foo () [0].

Использовать PHP 5.4.0 или выше.

0 голосов
/ 13 марта 2012

Хорошо, есть пара способов сделать это, кроме , как Илай предложил .Первое и простое для реализации это использование current ().Я нашел это в подобном посте здесь , поэтому я не могу взять кредит на это:)

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

Второе решение - использовать запрос XPATH.Единственная причина использовать запрос через xpath - это если вам нужно вычислить выражение.Все, что я могу найти, говорит, что это также должно работать для вас, но, как я уже сказал, это не обязательно и может даже не работать с вашей версией PHP.Я знаю, что это не с моей, так что, очевидно, я не смог проверить это.

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