Я использую 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
Я должен быть глупым … но я не могу понять этого.
Вы не можете использовать такой массив. Вам нужно передать его переменной как таковой
$venue = $xml->xpath('Stat[@Type="Venue"]'); echo $venue[0];
Я думаю, что в PHP 5.4 у вас будет возможность доступа к массиву из объектов, но не цитируйте меня на этом.
Изменить: Извините, я скопировал и вставил код из OP. [0]
выскользнул из моего радара!
Добавлена функция разыменования функциональных массивов, например foo () [0].
Используйте PHP 5.4.0 или новее.
Хорошо, есть несколько способов сделать это, кроме того, как предложил Эли . Первым и самым простым для вас было бы использование 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);