Задать вопрос

Объединение xml?

Есть две xml, которую я получаю с сайта, первая имеет вот такую структуру:
<retval></retval>
<id_group></id_group>
<name_group></name_group>
<cnt_goods></cnt_goods>
<order></order>
<rows>
	<row id=>
		<id_goods></id_goods>
		<name_goods></name_goods>
		<price></price>
		<currency></currency>
	</row> 
</rows>


Вторая, такую:
<retval></retval>
<id_goods></id_goods>
<name_goods></name_goods>
<nal></nal>
<preorder></preorder>
<price_goods>
	<wmz></wmz>
	<wmr></wmr>
	<wme></wme>
	<wmu></wmu>
	<pcr></pcr>
</price_goods>
<info>
	<img></img>
	<genre></genre>
	<izdatel></izdatel>
	<reliz></reliz>
	<language></language>
	<system></system>
	<youtube></youtube>
	<platform></platform>
	<type></type>
	<activation></activation>
	<description></description>
	<add_desc></add_desc>
</info>

НО, значения второй формируются от полученного значения первой(параметр - "id_goods")

Как в одном цикле вывести значения двух xml?

Делал так:

1) Получаю xml:
<?php
class STEAMBUY {
	public function GetGoods($id_goods) {
		$id_goods = (int) trim($id_goods);
		$url = 'http://steambuy.com/xml/?request=get_goods&id_good='.$id_goods;
		$data = simplexml_load_file($url);
		return $data;
}


public function GetList($id_group, $curr = 'RUR', $order = 'name') {
	$id_group = (int) trim($id_group);
	$url = 'http://steambuy.com/xml/?request=get_list&id_group='.$id_group.'&curr='.$curr.'&order='.$order;
	$data = simplexml_load_file($url);
	return $data;
	}
}
?>

2) Обрабатываю:
$xml = new STEAMBUY();
$id_group = empty($_GET['idn']) ? $id_group : (int) trim($_GET['idn']);
$url = 'index.php?idn='.$id_group;
$Orders = $xml->GetList($id_group, $curr);


3) Вывожу:
if ($Orders->retval == 1)
	echo 'Ошибка';
		else {
			foreach ($Orders->rows->row AS $Order) {	
                                      $infos = $xml->GetGoods($Order->id_goods);	 //Засовываю значение id_goods во вторую xml
                        //Вывожу значение второй
                        echo'<img src="'.$infos->info->img.'" width="178px" height="75px">
                        <p>'.$Order->name_goods.'</p>'; //Вывожу значение первой
                       }
              }


Но выводится это всё очень медленно. Если из цикла убрать вот это: $infos = $xml->GetGoods($Order->id_goods); ", то всё работает быстро(значения первой xml выводятся быстро). Как быстро вывести значения второй xml?
  • Вопрос задан
  • 3101 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
toxa82
@toxa82
Та скорее всего никак. У вас в цикле идет каждый раз обращение по http за описанием (get_goods&id_good=), поэтому так долго. Если есть возможность запросить описание сразу нескольких товаров, то лучше пройдитесь по 1-му xml и получите все нужные id_good, и получите их описание одним запросом. Это конечно не один foreach, но так будет быстрее.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@jamesmalvi
Один из лучших инструментов для XML является codebeautify.org/xmlviewer XML форматирования, валидатор XML, XML уменьшать, XML для JSON, XML, чтобы CSV
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы