我有一個50MB的XML文件。我想將它轉換爲CSV文件,但我發現大多數方法耗盡了服務器內存。是否有一種使用XMLReader等流方法來完成此操作的好方法。轉換大型XML文件,以CSV在PHP
回答
你想使用XmlReader
解析XML,因爲它的工作原理是基於事件的解析器 - 如。它不會將所有內容加載到內存中,而是在通過輸入文件前進時讀取。
的基於外籍SAX風格的解析器是最節省空間的選項:
它將執行你的$ start_element_handler每當元素標籤打開或關閉$ end_element_handler回調,而不是將整個文檔保存在內存中。
但儘管如此,50 MB不是很多,也許你的供應商可以了限制。
php_value memory_limit 100M
在.htaccess/httpd.conf中,或將其設置在php.ini中。
您是否嘗試過增加內存限制? ini_set('memory_limit', '256M')
(這是BTW一個非常壞的解決方案)
我不知道很多關於PHP API,但似乎這個類可以幫助你:3210
基本上你正在尋找基於解析器事件,像舊的SAX。這個解析器類型會觸發一個事件,或類似的東西。它的內存效率很高,因爲它不需要將整個文檔加載到內存中。
如果XML文件非常簡單,並且可以避免通過完整的XML解析器,並且可以逐行讀取PHP並逐行導出,則可以節省整個文件在內存中一次。什麼是XML結構?
我寫這個算法,前一段時間..隨意給它一個鏡頭。
http://sites.google.com/site/soichih/q-a/xml-to-csv-converter
任何機會,你有代碼的地方? – 2016-03-29 19:08:20
遲到了......
爲<domains><domain><name>myname.com</name></domain></domains>
$url = "http://mysite.com/my.xml";
$returnData = file_get_contents($url);
$xml = simplexml_load_file($url);
$csv = 'my.csv';
$path = '/var/www/html/';
$domain = $xml->domains->domain;
$fullpath = $path.$csv;
$fp = fopen($fullpath, 'w');
foreach ($xml->domains->domain as $domain) {
fputcsv($fp, get_object_vars($domain),',','"');
}
fclose($fp);
header('Content-Description: File Transfer');
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename='.basename($csv));
header('Content-Transfer-Encoding: binary');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($fullpath));
readfile($fullpath);
exit;
}
}
- 1. 轉換大型XML文件
- 2. 轉換.CSV文件到.XML
- 3. 轉換大的xml到csv
- 4. 轉換CSV文件以NSDictionaries
- 5. 在PHP中讀取大型CSV文件
- 6. 在PHP中將XML轉換爲CSV
- 7. 轉換XML文件導入CSV
- 8. 將CSV文件轉換爲XML
- 9. Perl:將csv文件轉換爲xml
- 10. 將XML文件轉換爲CSV
- 11. Ruby:將大的.xml文件轉換爲csv
- 12. 巨大的XML到CSV的轉換
- 13. Node.js將Xml轉換爲JSON以用於大型Xml文件的示例
- 14. 如何使用PHP腳本將CSV文件轉換爲XML?
- 15. PHP腳本將.CSV文件轉換爲.XML
- 16. 使用PHP將CSV文件轉換爲XML
- 17. PHP排序大型csv文件
- 18. XML轉換爲CSV
- 19. 斯卡拉:轉換XML數據幀以csv文件
- 20. 使用PHP如何轉換csv文件
- 21. PHP - XML到CSV轉換問題
- 22. 使用Django和轉換將大型CSV文件加載到MySQL
- 23. 如何使用python將大型Json文件轉換爲csv
- 24. 如何將大型XML數據轉換爲Excel或CSV
- 25. 從任何類型的轉換CSV文件,以UTF-8
- 26. 將XML轉換爲HTML/CSV文件格式的免費XML轉換器
- 27. 用於將CSV文件轉換爲XML文件的Xquery
- 28. 將XML文件轉換爲域模型
- 29. 使用VB6和XSLT轉換大型XML文件
- 30. 打開大型CSV文件?
XML結構答案是肯定的。 (隨意進行更詳細的答案發布更多細節) – 2010-01-24 21:51:03
有沒有太多其他細節 - 我有一個XML文件,我希望把CSV格式,我有一堆算法的要做到這一點,但他們所有使用太多的內存。你有一個不會耗盡記憶的算法嗎? – Brian 2010-01-24 21:59:45
等等,Excel?你在原始文章中說過XML。如果是Excel,請執行文件>另存爲...> CSV以獲取CSV輸出。 – MidnightLightning 2010-01-24 22:00:58