速度还算不错,挺好用的,处理个10来M的文本没啥问题。根据各自需要改吧
<?php class XmlPhrase { private $startTag = '<Row>'; private $endTag = '</Row>'; public function __construct() { set_time_limit(0); ini_set ( 'memory_limit', '8000M' ); } public function run() { $xmlstr = ''; $fp = fopen('1.xml','r'); echo "beginn"; if($fp) { while(!feof($fp)) { $buffer = fgets($fp, 4096); if(strpos($buffer, $this->startTag)!==false) { $xmlstr = ''; } elseif(strpos($buffer, $this->endTag)!==false) { $this->phraseXmlStr($xmlstr); } else { $xmlstr .= $buffer; } } fclose($fp); } echo "finishn"; } private function phraseXmlStr($xmlstr) { $xml = $tmp = $out = ''; $xmlstr = $this->startTag.$xmlstr.$this->endTag; $xmlstr = str_replace('<Data ss:Type="String">', '<![CDATA[', $xmlstr); $xmlstr = str_replace('</Data>', ']]>', $xmlstr); $xml = new SimpleXMLElement($xmlstr); foreach($xml->Cell as $v) { $tmp[] = trim($v); } $out = '"'.join('","', $tmp).'"'."n"; file_put_contents('result.csv', $out, FILE_APPEND); } } $app = new XmlPhrase(); $app->run(); ?>
原始数据类似这样的
<Row> <Cell><Data ss:Type="String">时间 </Data></Cell> <Cell><Data ss:Type="String">IP 地址 </Data></Cell> <Cell><Data ss:Type="String">您的个人邮箱: </Data></Cell> <Cell><Data ss:Type="String">姓名: </Data></Cell> <Cell><Data ss:Type="String">年龄: </Data></Cell> <Cell><Data ss:Type="String">性别: </Data></Cell> <Cell><Data ss:Type="String">月薪: </Data></Cell> <Cell><Data ss:Type="String">通讯地址: </Data></Cell> <Cell><Data ss:Type="String">申请款式: </Data></Cell> <Cell><Data ss:Type="String">申请理由: </Data></Cell> <Cell><Data ss:Type="String">联系电话: </Data></Cell> <Cell><Data ss:Type="String">您的职业: </Data></Cell> </Row>