Недавно я работал с tv_grab_uk_rt, который генерирует XML-файл xml-файла. Я написал сценарий для преобразования XML в объект, который я могу пропустить и вставить в базу данных. Пока у меня работает скрипт, я столкнулся с проблемой, которую я искал, чтобы получить разъяснения.
Когда я помещаю XML в объект, я получаю следующее:
SimpleXMLElement Object ( [@attributes] => Array ( [date] => Mon, 23 Dec 2013 04:30:01 GMT [source-info-url] => http://www.radiotimes.com [source-info-name] => Radio Times XMLTV Service [source-data-url] => http://xmltv.radiotimes.com/xmltv/channels.dat [generator-info-name] => XMLTV/0.5.61, tv_grab_uk_rt 1.342, 2011/06/19 06:50:36 [generator-info-url] => http://www.xmltv.org ) [channel] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => fiver.channel5.co.uk ) [display-name] => 5* [icon] => SimpleXMLElement Object ( [@attributes] => Array ( [src] => http://img.ruphp.com/php/channel5_star.jpg ) ) ) ) )
Допустим, что этот объект содержится в переменной $xml
, если я должен был сделать следующее:
foreach($xml->channel as $channel) { echo $channel->displayname }
Я понимаю, что смогу эхо-свойство объекта displayname
, в данном случае 5*
.
Но что произойдет, если я захочу сказать echo src
в этом случае http://img.ruphp.com/php/channel5_star.jpg
, как бы я сделал это с помощью объекта. Я не могу, например, сделать
foreach($xml->channel as $channel) { echo $channel->icon->@attributes->src }
Например, с массивами можно легко сделать
foreach($xml['channel'] as $channel) { echo $channel['icon']['@attributes']['src']; }
Но не с объектами. Вместо того, чтобы попасть в бесконечные циклы, я обнаружил, что могу преобразовать объект в массив, подобный этому
foreach($xml->channel as $channel) { echo $channel['icon']['@attributes']['src']; $channelArray = get_object_vars($channel); }
Затем я могу просто получить доступ к свойствам в виде массива. Таким образом, мой вопрос действительно заключается в том, что без преобразования объекта в массив существует ли способ просверлить свойства, т. Е.
$xml->channel->0->displayname