1

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

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

约翰·多伊 john_doe@email.com 06/07/2012 01:45

在交互式 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 文件,但不幸的是在其中没有产生任何输出。

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

非常感激您的帮忙!

4

2 回答 2

1

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

于 2012-07-06T14:51:36.130 回答
1

你似乎在努力工作。

XML(归根结底)可以表示为文本文件。

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

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

于 2012-07-06T15:41:45.230 回答