Я использую этот код для преобразования 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');
Это то, что выглядит мой узел даты:
<dateLastModified>1493913962397</dateLastModified>
<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');