Товарищи, да тут же SimpleXML даже не к чему.
<?php
$str = '<?xml version="1.0" encoding="utf-8" ?>
<tv generator-info-name="tele.perm.ru">
<channel id="1">
<display-name lang="ru">24 Док</display-name>
</channel>
<channel id="2">
<display-name lang="ru">24 Техно</display-name>
</channel>
<channel id="92">
<display-name lang="ru">2x2</display-name>
</channel>
</tv>';
$document=new DOMDocument();
$document->loadXML($str);
$xpath = new DOMXpath($document);
foreach ($xpath->query("/tv/channel") as $channel_node){
$channel_id = intval($channel_node->getAttribute('id'));
$channel_name_node = $xpath->query("display-name", $channel_node)->item(0);
$channel_name = $channel_name_node?$channel_name_node->textContent:"";
/* что-нибудь полезное */
echo "<br />{$channel_id}: {$channel_name}";
};
UPD: …а если нужно вывести только названия каналов, то решение вообще сокращается до неприлично короткого:
<?php
$str = '<?xml version="1.0" encoding="utf-8" ?>
<tv generator-info-name="tele.perm.ru">
<channel id="1">
<display-name lang="ru">24 Док</display-name>
</channel>
<channel id="2">
<display-name lang="ru">24 Техно</display-name>
</channel>
<channel id="92">
<display-name lang="ru">2x2</display-name>
</channel>
</tv>';
$document=new DOMDocument();
$document->loadXML($str);
$xpath = new DOMXpath($document);
foreach ($xpath->query("/tv/channel/display-name") as $channel_name_node){
$channel_name = $channel_name_node->textContent;
echo "<br />{$channel_name}";
};