Чтение нескольких элементов из XML-канала с «-» в именах элементов

Я пытаюсь прочитать элементы XML, в имени которых есть "-". Канал можно найти по адресу http://forecast.weather.gov/MapClick.php?lat=42.19774&lon=-121.81797&FcstType=dwml В своем последнем вопросе я просто пытался прочитать любой из них. чтение XML-канала с '-' в некоторых имен элементов Теперь я пытаюсь прочитать конкретный элемент (кроме первого), и я снова застреваю.

Это даст мне первый макет времени и первое действительное время начала.

$time = $xml->data->{'time-layout'}->{'start-valid-time'};

Мне нужен второй макет времени, и я хочу прочитать атрибуты элементов start-valid-time.

Ниже приведен способ, который я нашел, который работает. То, что я сделал ниже, не может быть правильным способом сделать это. Как человек обычно должен это делать?

Спасибо.

     $time = $xml->data->{'time-layout'};
     $time2= $time[1]->{'start-valid-time'};
     $count= 14;
      for ($i = 0; $i <=$count ; $i++)
      {
         echo $time2[$i]->attributes();
         print "<br>\n";
      }

person Brandan    schedule 10.05.2011    source источник


Ответы (2)


То, что вы делаете, правильно. Вы можете сократить до

$dwml = simplexml_load_file('http://…');
foreach ($dwml->data->{'time-layout'}[1]->{'start-valid-time'} as $time) {
    echo $time;
}

или используйте XPath

$dwml = simplexml_load_file('http://…');
foreach ($dwml->xpath('/dwml/data/time-layout[2]/start-valid-time') as $time) {
    echo $time;
}
person Gordon    schedule 10.05.2011

Для этого типа запросов придуман XPath

person Ward Bekker    schedule 10.05.2011
comment