【发布时间】:2014-01-12 16:19:40
【问题描述】:
我最近一直在使用生成电视指南 xml 文件的 tv_grab_uk_rt。我编写了一个脚本来将 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
【问题讨论】:
-
您可以使用数组访问 (
$element['src']) 在 SimpleXML 中访问 XML 属性,@attribute只是装饰性的,并且不是您误解的对象的属性它。这在 PHP 手册中有很好的解释:Basic SimpleXML usage