选择数组中的第二个XML元素

时间:2014-10-30 21:37:03

标签: php arrays xml

我通过simpleXML获取了它的一部分:

...

<channel id="Polo TV">
    <display-name lang="pl">Polo TV</display-name>
    <icon src="http://m-tvguide.pl/ikony/polo.png" />
    <url>http://www.programtv.interia.pl</url>
  </channel>
  <programme start="20141030005500 +0100" stop="20141030015000 +0100" channel="TVP 1">
    <title lang="pl">Po prostu</title>
    <sub-title lang="pl">http://i.iplsc.com/-/0003K96AEV7D81JK-C0.jpg</sub-title>

    ...

    <category lang="pl">Informacja</category>
    <category lang="pl">Program Tomasza Sekielskiego</category>
  </programme>
  <programme start="20141030015000 +0100" stop="20141030033500 +0100" channel="TVP 1">
    <title lang="pl">Dorwać małego</title>

...

更多:http://wklej.to/2zmFZ。 我的PHP脚本:

<?php

$xml=simplexml_load_file("file.xml");

$channels = array();
foreach ($xml->channel as $c) {
    $channels[ $c['id']->__toString() ] = $c->{'display-name'}->__toString();
}

$time = date( "YmdHi" );

foreach($xml->xpath( 'programme[@channel="TVP"]' ) as $item) {
    $start = substr( (string)$item["start"], 0, -8);
    $end   = substr( (string)$item["stop"], 0, -8);
    if ($time > $start && $time < $end) {
    echo "<b><font size='3'>$item->title </font></b><br>";
        echo "<u><b>Gatunek:</b></u> ".$item->{'category'}. "<br>";
        echo "<u><b>Start:</b></u> " .date("G:i", strtotime($start)) . '<br>';
        echo "<u><b>Koniec:</b></u> " .date("G:i", strtotime($end)) . '<br>';
        echo "<u><b>Kanał:</b></u> ".$channels[ $item["channel"]->__toString() ]. "<br>";     
        echo "<u><b>Opis:</b></u> ".$item->desc. "<br>";
    }
}

?>

正如在xml文件中可以看到的,总是提供两个<category>指令。我想得到第二个而不是第一个,就像现在一样。

2 个答案:

答案 0 :(得分:1)

如果您有一个元素数组,则可以像使用数字下标一样访问标准PHP数组中的元素。最好先检查是否先设置了元素:

foreach($xml->xpath( 'programme[@channel="TVP"]' ) as $item) {
    // code here...
    # check whether the 'category' element is present
    if (isset($item->category)) {
        echo "<u><b>Gatunek:</b></u> ";
        # check if there are two category items; if so, print the second
        if (isset($item->category[1])) {
            echo $item->category[1] . "<br>";
        } else {
            echo $item->category . "<br>";
        }
    }
    // more code here...
}

答案 1 :(得分:1)

采取第二类(它们是零索引),如果它不存在,请采取第一类:

$item->category[1] ?: $item->category;