答えて
これはかなり簡単です。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(2つの間の変換)が必要なクライアントがあります。顧客から注文されたアイテムは、XMLからCSVに変換されるときにそのように格納されます。item_name | item_price | item_quantity私がしているのは、CSV> XMLがこの情報を格納する一時csvを作成することです。 私がしたいことは、このスクリプトがその一時ファイルで行うことです。しかし何らかの理由で、それは必要以上にループしようとし続けます。できれば私にPMしてください – SC1988
There are a number of sites out there that will do it for you。
これは、通常のプロセスではなく、1回限りのものであることを行っている場合は、それだけでXMLを自分でCSV出力を解析する理想的なことがあります
$csv = file("path/to/csv.csv");
foreach($csv as $line)
{
$data = explode(",", $line);
echo "<xmltag>".$data[0]."</xmltag>";
//etc...
}
は、PHPのfile
とstring
機能を検索します。
乾杯。役に立つ答え!私は一見を持っていきます。 PHP.netサイトでもfgetcsvを見てきました。 – StuBlackett
上記のコードはXMLドキュメントを作成しますが、物理デバイスには格納しません。だからecho $doc->saveXML();
を
に置き換えてください。 '* Googleの一般的な方向を指して" .CSVを.XMLに変換する "という要求で* –
うん"それは本当に便利なソフトウェア "ロールの目" – StuBlackett
"ちょうどグーグルそれは簡単なドンだったらスチュがすでにそれをやったと思う? – SC1988