使用PHP将CSV文件转换为XML

时间:2012-07-06 14:46:19

标签: php xml csv xmlwriter

我已经研究了一个答案,主要是在这个问题Convert Tab delimited text file to XML的答案的帮助下,将以下脚本拼凑在一起逐行读取CSV文件,然后将结果转换为XML文件。

CSV文件以这种方式包含三个或更多单元格的行:

John Doe john_doe@email.com 06/07/2012 01:45

在Interactive PHP shell中运行时,以下脚本会忽略文件的第一行,并在第一个xml标记内从一行中的两行中吐出所有内容:

<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', true);
ini_set('auto_detect_line_endings', true);
$xmlWriter = new XMLWriter();
$xmlWriter->openUri('/path/to/destination.xml');
$xmlWriter->setIndent(true);
$xmlWriter->startDocument('1.0', 'UTF-8');
$xmlWriter->startElement('root');

$tsvFile = new SplFileObject('/path/to/destination.csv');
$tsvFile->setFlags(SplFileObject::READ_CSV);
$tsvFile->setCsvControl("\t");
foreach ($tsvFile as $line => $row) {
if($line > 0 && $line !== ' ') {
    $xmlWriter->startElement('item');
            $xmlWriter->writeElement('name', $row[0]); 
            $xmlWriter->writeElement('email', $row[1]);
            $xmlWriter->writeElement('date', $row[2]);
            $xmlWriter->endElement();
    }
}

$xmlWriter->endElement();
$xmlWriter->endDocument(); ?>

要解决此问题,我在此尝试了解决方案:tab-delimited string to XML with PHP

以下是修改过的脚本:

<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', true);
ini_set('auto_detect_line_endings', true);
$xmlWriter = new XMLWriter();
$xmlWriter->openUri('/path/to/destination.xml');
$xmlWriter->setIndent(true);
$xmlWriter->startDocument('1.0', 'UTF-8');
$xmlWriter->startElement('root');

$tsvFile = new SplFileObject('/path/to/destination.csv');
$tsvFile->setFlags(SplFileObject::READ_CSV);
$tsvFile->setCsvControl("\t");

$lines = explode("\n", $tsvFile);
$tsvData = array();
foreach ($lines as $line ) {
    if($line > 0 ) {
        $tsvData[] = str_getcsv($line, "\t");
        $tsvData[] = str_getcsv($line, "\t");
        foreach ($tsvData as $row) {
        $xmlWriter->writeElement('name', $row[0]); 
        $xmlWriter->writeElement('email', $row[1]);
            $xmlWriter->writeElement('date', $row[2]);
        $xmlWriter->endElement();
         }
    }
}

$xmlWriter->endElement();
$xmlWriter->endDocument();?>

此脚本创建xml文件,但遗憾的是它内部没有输出。

有人能指出我哪里出错了会帮助我吗?我不是这方面的专家,但我努力学习。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

脚本中的任何地方都有"\t",您正在指定制表符(因为您为TSV文件修改了某些内容)。如果您尝试转换CSV文件(逗号分隔列表),请尝试将"\t"的所有实例替换为","

答案 1 :(得分:1)

你似乎在努力工作。

XML(在一天结束时)可以表示为文本文件。

虽然不只是创建一个字符串或文件。

读入CSV,拆分列。使用适当的标记将CSV作为XML写入该字符串。然后将该文件或字符串加载到DOM对象中。