Объединение 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?
  • Вопрос задан
  • 3099 просмотров
Решения вопроса 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
10 мая 2024, в 18:16
30000 руб./за проект
10 мая 2024, в 18:07
20000 руб./за проект