У меня есть 4 объекта SimpleXMLElement, которые выводятся из цикла foreach?
Мне нужно объединить 4 объекта в 1 перед выводом в xml. Это то, на чем я застрял.
$auth_tokens = array('tok1', 'tok2', 'tok3', 'tok4');
foreach($auth_tokens as $auth_token) { // 4 iterations in loop
$response = curl_exec($connection); // API xml response
$xml = simplexml_load_string($response); // loaded xml into object
$entries = $xml->PaginationResult->TotalNumberOfEntries;
$xml = $xml->OrderArray->Order; // Only want this section of each object
if ($entries == 0) {
continue;
}
echo '<pre>' . var_export($xml, true) . '</pre><br>';
}
Выход: сокращенная версия объектов
SimpleXMLElement::__set_state(array(
'OrderID' => '1118',
));
SimpleXMLElement::__set_state(array(
'OrderID' => '3916',
));
SimpleXMLElement::__set_state(array(
'OrderID' => '1628',
));
SimpleXMLElement::__set_state(array(
'OrderID' => '3724',
));
После объединения 4 объектов я выведу echo $xml->asXml()
за пределы цикла и смогу добавить родительский узел.
foreach($auth_tokens as $auth_token) {
// ....
}
$xml = simplexml_load_string("<Orders>$xml</Orders>");
header('content-type: text/xml');
echo $xml->asXML();
Как я могу объединить эти 4 объекта в один и больше не делать циклов, чтобы это произошло?
Очень простой способ сделать это - экспортировать каждый фрагмент XML и добавить его в строку ($orders
) внутри цикла, а затем добавить это в свой последний вызов simplexml_load_string()
...
$orders = "";
foreach($auth_tokens as $auth_token) {
// ....
//echo '<pre>' . var_export($xml, true) . '</pre><br>';
$orders .= $xml->asXML();
}
$xml = simplexml_load_string("<Orders>$orders</Orders>");
header('content-type: text/xml');
echo $xml->asXML();
Благодарю. Я уже понял, что мне нужно использовать
$xml->asXML();
внутри цикла и объединить его с переменной.