我想知道是否有可接受的方法将制表符分隔文本文件转换为XML,以便可以在Adobe Flex中导入。我更愿意使用PHP来实现这一目标。
谢谢
修改 的
我要转换的制表符分隔文本文件的格式为
Refnumber Location Name Age
123 North America Steve 32
我希望转换为
<data>
<refnumber> 123 </refnumber>
<location> North America </location>
<name> Steve </name>
<age> 32 </age>
</data>
答案 0 :(得分:4)
您可以逐行迭代文件,并使用XMLWriter
编写内容$xmlWriter = new XMLWriter();
$xmlWriter->openUri('/path/to/destination.xml');
$xmlWriter->setIndent(true);
$xmlWriter->startDocument('1.0', 'UTF-8');
$xmlWriter->startElement('root');
$tsvFile = new SplFileObject('filename.tsv');
$tsvFile->setFlags(SplFileObject::READ_CSV);
$tsvFile->setCsvControl("\t");
foreach ($tsvFile as $line => $row) {
if($line > 0) {
$xmlWriter->startElement('data');
$xmlWriter->writeElement('refnumber', $row[0]);
$xmlWriter->writeElement('location', $row[1]);
$xmlWriter->writeElement('name', $row[2]);
$xmlWriter->writeElement('age', $row[3]);
$xmlWriter->endElement();
}
}
$xmlWriter->endElement();
$xmlWriter->endDocument();
使用XmlWriter具有额外的好处,它会告诉您何时尝试为XML元素编写非法内容。如果您知道tsv文件中只有有效数据,您也可以使用模板并将其写入另一个文件。
$tsvFile = new SplFileObject('filename.tsv');
$tsvFile->setFlags(SplFileObject::READ_CSV);
$tsvFile->setCsvControl("\t");
$template = <<< TPL
<data>
<refnumber>%d</refnumber>
<location>%s</location>
<name>%s</name>
<age>%d</age>
</data>
TPL;
$destFile = new SplFileObject('destination.xml', 'w+');
$destFile->fwrite('<?xml version="1.0" encoding="UTF-8"?>');
$destFile->fwrite("\n<root>\n");
foreach ($tsvFile as $line => $row) {
if($line > 0) {
$destFile->fwrite(vsprintf($template, $row));
}
}
$destFile->fwrite('</root>');
答案 1 :(得分:2)
我假设您已经阅读了制表符分隔文件。您可以使用以下内容生成XML输出:
// get lines here
$xml = '<xml>';
foreach ($lines as $line) {
// get values from line here
$xml .= '<data>';
$xml .= sprintf('<%s>%s</%s>', 'refnumber', $values[0], 'refnumber');
$xml .= sprintf('<%s>%s</%s>', 'location', $values[1], 'location');
$xml .= sprintf('<%s>%s</%s>', 'name', $values[2], 'name');
$xml .= sprintf('<%s>%s</%s>', 'age', $values[3], 'age');
$xml .= '</data>';
}
$xml .= '</xml>';
答案 2 :(得分:1)
如果您想使用PHP来执行此操作,则需要read your file line by line(我猜一组数据以换行符结束),然后使用Tab作为split行。分隔符(常规扩展名为\r
)。
之后,要创建XML-Output,您需要使用XMLWriter - 类,它可以将结果打印到屏幕上(就像您打开普通的XML文件一样),保存它文件系统或将其写入数据库(使用类似MySQLi)。