Intereting Posts
Попытка подключить две базы данных к файлу php и сохранить сеанс пользователя Jenkins – добавьте диаграмму в интерфейс работы Разделите строку на разные подстроки, но сохраните эти подстроки Очистить таблицу MySQL ежечасно Вызов функции-члена get () для не-объекта Отправка строкой, закодированной в mcrypt, с помощью параметра URL – декодированный текст искажается Не-браузер отправил HTTP-запрос и сеансы PHP Как добавить очищенные данные веб-сайта в базу данных? CakePHP Неопределенная радиокнопка изменена на нежелательное значение для отправки CURLOPT_POSTFIELDS имеет ограничение по длине или размеру? TYPO3: Как визуализировать текстовые элементы tt_content в моих собственных расширениях? Ошибка при загрузке изображения Yii php try … else предотвратить объединение двух конфигураций модуля в Zend Framework 2 PHP – не может использовать скаляр как предупреждение массива

Ограничить данные XML при преобразовании JSON в XML – PHP

Я использую этот код для преобразования JSON в XML, и все работает нормально. Я получаю 200 записей в XML, но я хочу ограничить их до 50. Я просто хочу создать XML-файл с последними 50 записями. Вместо того, чтобы преобразовывать все, что у нас есть в JSON, в XML.

function array_to_xml( $data, &$xml_data ) { foreach( $data as $key => $value ) { if( is_numeric($key) ){ $key = 'item'.$key; //dealing with <0/>..<n/> issues } if( is_array($value) ) { $subnode = $xml_data->addChild($key); array_to_xml($value, $subnode); } else { $xml_data->addChild("$key",htmlspecialchars("$value")); } } } $xml_data = new SimpleXMLElement('<?xml version="1.0"?><data></data>'); $json_file = file_get_contents("/directory/jsonfile.json"); $json_data = json_decode($json_file, true); $json_data = array_slice((array)$json_data, 0, 50); array_to_xml($json_data,$xml_data); $result = $xml_data->asXML('/directory/xmlfile.xml'); 

XML

Это то, что выглядит мой узел даты:

 <dateLastModified>1493913962397</dateLastModified> 

Данные XML-образца

 <data> <total>212</total> <start>0</start> <count>212</count> <data> <item0> <id>123</id> <title>abc-test1</title> <clientContact> <id>111</id> <firstName>abc</firstName> <lastName>xyz</lastName> <email>abc@xyz.ca</email> </clientContact> <isOpen>1</isOpen> <isPublic>1</isPublic> <isJobcastPublished>1</isJobcastPublished> <owner> <id>222</id> <firstName>testname</firstName> <lastName>testlastname</lastName> <address> <address1>test address,</address1> <address2>test</address2> <city>City</city> <state>state</state> <zip>2222</zip> <countryID>22</countryID> <countryName>Country</countryName> <countryCode>ABC</countryCode> </address> <email>test@test.com</email> <customText1>test123</customText1> <customText2>testxyz</customText2> </owner> <publicDescription> <p>test info</p> </publicDescription> <status>test</status> <dateLastModified>22222</dateLastModified> <customText4>test1</customText4> <customText10>test123</customText10> <customText11>test</customText11> <customText16>rtest</customText16> <_score>123</_score> </item0> <item1> ... </item1> ... </data> </data> 

Многое зависит от того, сколько у вас контроля над данными. Если вы можете сортировать данные по метке времени, вы можете добавить счетчик и выйти из цикла, когда счетчик достигнет 50.

 function array_to_xml( $data, &$xml_data ) { $count = 0; foreach( $data as $key => $value ) { $count++; if($count == 50) { exit; //or return; } if( is_numeric($key) ){ $key = 'item'.$key; //dealing with <0/>..<n/> issues } if( is_array($value) ) { $subnode = $xml_data->addChild($key); array_to_xml($value, $subnode); } else { $xml_data->addChild("$key",htmlspecialchars("$value")); } } } $xml_data = new SimpleXMLElement('<?xml version="1.0"?><data></data>'); $json_file = file_get_contents("/directory/jsonfile.json"); $json_data = json_decode($json_file, true); array_to_xml($json_data,$xml_data); $result = $xml_data->asXML('/directory/xmlfile.xml');