将 .CSV 文件转换为 .XML 的 PHP 脚本

Posted

技术标签:

【中文标题】将 .CSV 文件转换为 .XML 的 PHP 脚本【英文标题】:PHP Script to convert .CSV files to .XML 【发布时间】:2011-06-18 16:14:27 【问题描述】:

只是想知道是否有人可以指出一些提示/脚本的方向,这将帮助我使用 php 从原始 CSV 文件创建 XML。

干杯

【问题讨论】:

我可以。 *pointing in the google general direction with "convert .CSV to .XML" request* 是的,做它的“软件”真的很方便“Roll Eyes” '谷歌一下'好吧,如果这很容易,你不认为斯图已经做到了吗? 【参考方案1】:

很抱歉提出一个旧线程,但我尝试了这个脚本,但我得到了一个 DOM 异常错误

我们的 CSV 文件的标题是 display_name office_number mobile_number,我收到的错误是 DOMDocument->createElement('\xEF\xBB\xBFdisplay_name') #1 main

【讨论】:

这不是答案。您应该尝试提出一个新问题。提供代码、您所做的任何更改并描述您面临的问题。【参考方案2】:

这很容易做到,只需查看 fgetcsv 读取 csv 文件,然后查看 DomDocument 写入 xml 文件。此版本使用文件中的标头作为 xml 文档的键。

<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', true);
ini_set('auto_detect_line_endings', true);

$inputFilename    = 'input.csv';
$outputFilename   = 'output.xml';

// Open csv to read
$inputFile  = fopen($inputFilename, 'rt');

// Get the headers of the file
$headers = fgetcsv($inputFile);

// Create a new dom document with pretty formatting
$doc  = new DomDocument();
$doc->formatOutput   = true;

// Add a root node to the document
$root = $doc->createElement('rows');
$root = $doc->appendChild($root);

// Loop through each row creating a <row> node with the correct data
while (($row = fgetcsv($inputFile)) !== FALSE)

    $container = $doc->createElement('row');
    foreach($headers as $i => $header)
    
        $child = $doc->createElement($header);
        $child = $container->appendChild($child);
        $value = $doc->createTextNode($row[$i]);
        $value = $child->appendChild($value);
    

    $root->appendChild($container);


$strxml = $doc->saveXML();
$handle = fopen($outputFilename, "w");
fwrite($handle, $strxml);
fclose($handle);

【讨论】:

嗨,迈克尔,我知道这是一篇旧帖子,但我希望你能注意到这一点。我怎样才能将这个相同的功能嵌套在它自身中?我所拥有的是希望 XML > CSV > XML > CSV(两者之间的转换)用于他们的库存系统的客户。当从 XML 转换为 CSV 时,他们的客户订购的商品将按原样存储:item_name |商品价格 | item_quantity 我所做的是让 CSV > XML 创建一个临时 csv 来存储此信息。我想要做的只是这个脚本对那个临时文件所做的事情。但由于某种原因,它一直试图循环比它应该的更多。可以的话请私信我【参考方案3】:

上面给出的代码创建了一个 XML 文档,但没有将它存储在任何物理设备上。所以用

替换 echo $doc-&gt;saveXML();
$strxml = $doc->saveXML();
$handle = fopen($outputFilename, "w");
fwrite($handle, $strxml);
fclose($handle);

【讨论】:

【参考方案4】:

There are a number of sites out there that will do it for you.

如果这将是一个常规过程而不是一次性的事情,那么只解析 CSV 并自己输出 XML 可能是理想的:

$csv = file("path/to/csv.csv");

foreach($csv as $line)

    $data = explode(",", $line);
    echo "<xmltag>".$data[0]."</xmltag>";
    //etc...

查找 PHP 的 filestring 函数。

【讨论】:

干杯本。有用的答案!!我去看看。也在 PHP.net 网站上查看 fgetcsv。

以上是关于将 .CSV 文件转换为 .XML 的 PHP 脚本的主要内容,如果未能解决你的问题,请参考以下文章

将 CSV 文件转换为 XML

使用 XSLT 将 CSV 文件转换为 XML

python [xml文件到voc的csv文件]将voc标签转换为xml格式为csv格式#python #csv #xml

在python中使用argparse将csv转换为xml

将 CSV 转换为 XML

我用 php 创建了一个脚本来将 xml 转换为 csv,但是所有结果都是垂直的,而不是在一行中带有标题