Показать сообщение отдельно
  #7 (permalink)  
Старый 18.07.2010, 14:45
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Товарищи, да тут же 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}";
};

Последний раз редактировалось subzey, 18.07.2010 в 14:53. Причина: UPD
Ответить с цитированием