我创建一个数组:
$tv = simplexml_load_file('output/'.$xml);
我用 foreach 遍历它:
foreach ($tv as $tvinfo):
if ($tvinfo['channel'] != ''){
$channel=$tvinfo['channel'];
}
但这只是其价值所在的频道或标签的标识符(我不确定)。我正在尝试获取名称,例如“Channel 1”(位于[id])。
echo $tv['channel'][0]->display-name;
但我不知道如何去做。途中有对象,我不知道如何与它们交互,我还没有想出如何在循环中完成所有操作,获取名称而不是标识符。
我附上了 XML 数组结构:
SimpleXMLElement Object
(
[@attributes] => Array
(
[source-info-url] => http://cherrytest.com/
[source-info-name] => CherryTest
[generator-info-name] => XMLTV/: tv_grab_na_dd.in,v 1.70 2008/03/03 15:21:41 rmeden Exp $
[generator-info-url] => http://www.xmltv.org/
)
[channel] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => Канал 1
)
[display-name] => Канал 1
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => Канал 2
)
[display-name] => Канал 2
)
)
[programme] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[start] => 20161104121212 +0200
[stop] => 20161105215224 +0200
[channel] => 0
)
[title] => Передача 1
[desc] => Описание отсутствует.
[date] => 20161104
[audio] => SimpleXMLElement Object
(
[stereo] => stereo
)
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[start] => 20161108121212 +0200
[stop] => 20161109215225 +0200
[channel] => 0
)
[title] => Передача 2
[desc] => Описание второй передачи. Йеее.
[date] => 20161108
[audio] => SimpleXMLElement Object
(
[stereo] => stereo
)
)
[2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[start] => 20161112121212 +0200
[stop] => 20161113215226 +0200
[channel] => 1
)
[title] => Передача 3
[desc] => Описание отсутствует.
[date] => 20161112
[audio] => SimpleXMLElement Object
(
[stereo] => stereo
)
)
)
)
XML 文件本身:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tv SYSTEM 'xmltv.dtd'>
<tv source-info-url="http://cherrytest.com/" source-info-name="CherryTest" generator-info-name="XMLTV/: tv_grab_na_dd.in,v 1.70 2008/03/03 15:21:41 rmeden Exp $" generator-info-url="http://www.xmltv.org/">
<channel id="Канал 1">
<display-name>Канал 1</display-name>
</channel>
<channel id="Канал 2">
<display-name>Канал 2</display-name>
</channel>
<programme start="20161104121212 +0200" stop="20161105215224 +0200" channel="0">
<title lang="ua">Передача 1</title>
<desc lang="ua">Описание отсутствует.</desc>
<date>20161104</date>
<audio>
<stereo>stereo</stereo>
</audio>
</programme>
<programme start="20161108121212 +0200" stop="20161109215225 +0200" channel="0">
<title lang="ua">Передача 2</title>
<desc lang="ua">Описание второй передачи. Йеее.</desc>
<date>20161108</date>
<audio>
<stereo>stereo</stereo>
</audio>
</programme>
<programme start="20161112121212 +0200" stop="20161113215226 +0200" channel="1">
<title lang="ua">Передача 3</title>
<desc lang="ua">Описание отсутствует.</desc>
<date>20161112</date>
<audio>
<stereo>stereo</stereo>
</audio>
</programme>
</tv>
如果它对任何人都有用,我按照下面描述的方式解决了属性问题,否则非常感谢@Aleksey Shimansky
$number = (int) $tvinfo['channel']; //конвертировал в int
$real_channel = $tv->channel[$number]->attributes(); //так как у меня цикл и каналы могут повторятся для разных передач я достаю соответствующий канал
$channel=$real_channel;
对对象的引用必须通过箭头,因此
$tv['channel']是不正确的。需要$tv->channel。内部也是如此,除非名字是复合的。在这种情况下,您需要解决->{'ИМЯ_ЭЛЕМЕНТА'},例如有一种访问属性的方法
attributes()。例如属性访问channel[0]看起来像全部的:
会带出
在一个循环中:
或者
例子