Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.07.2010, 14:04
Аватар для cuberboy
Профессор
Отправить личное сообщение для cuberboy Посмотреть профиль Найти все сообщения от cuberboy
 
Регистрация: 20.07.2009
Сообщений: 202

SimpleXML вложеный элемент
<?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>

$xml=simplexml_load_file("http://192.168.9.5/amin/tvguide.xml");



foreach($xml->children()->channel as $x)
{
echo $x[id]." <br>";

};
а как добраться до вложенного? уже мозг порвал
Ответить с цитированием
  #2 (permalink)  
Старый 15.07.2010, 16:49
Аватар для cuberboy
Профессор
Отправить личное сообщение для cuberboy Посмотреть профиль Найти все сообщения от cuberboy
 
Регистрация: 20.07.2009
Сообщений: 202

Решил проблему оказывается уроды предоставляющие данные не знают стандарта ((((

foreach($xml->channel as $x)
{
//echo $x[id];
echo( $x->display."<br>");

};

пред использованием убрать тире в display-name

Последний раз редактировалось cuberboy, 15.07.2010 в 19:46.
Ответить с цитированием
  #3 (permalink)  
Старый 16.07.2010, 07:59
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

где в стандарте сказано, что нельзя в имени дефисы использовать?
http://www.w3.org/TR/2008/REC-xml-20081126/#NT-Name
Ответить с цитированием
  #4 (permalink)  
Старый 16.07.2010, 11:06
Аватар для cuberboy
Профессор
Отправить личное сообщение для cuberboy Посмотреть профиль Найти все сообщения от cuberboy
 
Регистрация: 20.07.2009
Сообщений: 202

ну я сделал такой вывод после того как убрал дефис и всё стало работать. .....ну тогда SimpleXML тупит и не воспринимает дефисы
Ответить с цитированием
  #5 (permalink)  
Старый 16.07.2010, 23:14
Аватар для cuberboy
Профессор
Отправить личное сообщение для cuberboy Посмотреть профиль Найти все сообщения от cuberboy
 
Регистрация: 20.07.2009
Сообщений: 202

ой какая жуть......файлик 5 мб, разбор формата в "лоб" через найти вырезать дало прирост производительности в два раза.
Ответить с цитированием
  #6 (permalink)  
Старый 16.07.2010, 23:21
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

ну он же наверное создает сначала дерево, т.е. парсит весь файл. Можешь другие парсеры попробовать
Ответить с цитированием
  #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
Ответить с цитированием
  #8 (permalink)  
Старый 18.07.2010, 18:51
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от subzey
Товарищи, да тут же SimpleXML даже не к чему.
subzey, а почему даже? И чем он от DOM так сильно отличается? Я понимаю, от xml parser, xml reader...
Ответить с цитированием
  #9 (permalink)  
Старый 18.07.2010, 21:01
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

x-yuri,
Для меня это просто из той же категории, что подключать jQuery, чтобы получить элемент по его id.
Ответить с цитированием
  #10 (permalink)  
Старый 20.07.2010, 10:58
Аватар для cuberboy
Профессор
Отправить личное сообщение для cuberboy Посмотреть профиль Найти все сообщения от cuberboy
 
Регистрация: 20.07.2009
Сообщений: 202

не работал дум....от того и выбрал симпл. спасибо за инфу!!!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить элемент на котором щелчок warobushek Events/DOM/Window 3 13.06.2010 12:04
Как узнать содержит ли DOM определенный элемент Ruslan Events/DOM/Window 8 12.03.2010 22:02
Как добавить элемент в обьект json Юрий Игоревич Общие вопросы Javascript 2 26.10.2009 15:01
Кодировка при использовании Ajax Nichloas AJAX и COMET 9 17.09.2009 16:06
Добавить активный элемент Wirty jQuery 5 09.08.2009 16:06