我最近一直在使用tv_grab_uk_rt生成电视指南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://www.lyngsat-logo.com/logo/tv/cc/channel5_star.jpg
)
)
)
)
)
让我们说这个对象包含在变量$xml
中,如果我要执行以下操作:
foreach($xml->channel as $channel)
{
echo $channel->displayname
}
我意识到我能够回显displayname
的对象属性,在本例中为5*
。
但是,如果我想在这种情况下回复src
http://www.lyngsat-logo.com/logo/tv/cc/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
答案 0 :(得分:1)
每个channel
都是SimpleXMLElement个实例,因此您可以
foreach($xml->channel as $channel)
{
echo $channel->icon->attributes()->src;
}
如有疑问,请始终从官方文档开始。