将制表符分隔的文本文件转换为XML

时间:2011-05-26 16:04:16

标签: php

我想知道是否有可接受的方法将制表符分隔文本文件转换为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>

3 个答案:

答案 0 :(得分:4)

您可以逐行迭代文件,并使用XMLWriter

编写内容

XmlWriter示例(demo

$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文件中只有有效数据,您也可以使用模板并将其写入另一个文件。

模板示例(demo

$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)。