我已经研究了一个答案,主要是在这个问题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文件,但遗憾的是它内部没有输出。
有人能指出我哪里出错了会帮助我吗?我不是这方面的专家,但我努力学习。
非常感谢您的帮助!
答案 0 :(得分:1)
脚本中的任何地方都有"\t"
,您正在指定制表符(因为您为TSV文件修改了某些内容)。如果您尝试转换CSV文件(逗号分隔列表),请尝试将"\t"
的所有实例替换为","
。
答案 1 :(得分:1)
你似乎在努力工作。
XML(在一天结束时)可以表示为文本文件。
虽然不只是创建一个字符串或文件。
读入CSV,拆分列。使用适当的标记将CSV作为XML写入该字符串。然后将该文件或字符串加载到DOM对象中。