xmlファイルから指定した値だけをcsvに変換したい...
XML ファイル:
<?xml version="1.0" encoding="UTF-8"?>
<file>
<PRODUCT sku="12345" price="129"/>
<PRODUCT sku="12356" price="150"/>
<PRODUCT sku="12367" price="160"/>
<PRODUCT sku="12389" price="190"/>
</file>
CSV ファイル。
SKU、価格 12345,129 12356,150 12367,160 12389,190
12345、12367、12389のみの価格を知りたい
これは私の開始ファイルです:
<?php
$filexml = 'file.xml';
if (file_exists($filexml)){
$xml = simplexml_load_file($filexml);
$file = fopen('file.csv', 'w');
$header = array('sku', 'price');
fputcsv($file, $header, ',', '"');
foreach ($xml->PRODUCT as $product){
$item = array();
$value1 = $product->attributes()->sku;
$value2 = $product->attributes()->price;
$item[] = $value1;
$item[] = $value2;
fputcsv($file, $item, ',', '"');
}
fclose($file);
}
?>
オプションはこれにすることができますが、私に配列を返しています。おそらくそこに何か問題があります。
<?php
$filexml = 'file.xml';
if (file_exists($filexml)){
$xml = simplexml_load_file($filexml);
$file = fopen('file.csv', 'w');
$header = array('sku', 'price');
$customvalue = array('12345', '12367', '12389');
fputcsv($file, $header, ',', '"');
foreach ($xml->PRODUCT as $product){
$item = array();
$value1 = $product->attributes()->sku;
$value2 = $product->attributes()->price;
$item[] = $customvalue;
$item[] = $value2;
fputcsv($file, $item, ',', '"');
}
fclose($file);
}
?>
ありがとう
ライアンの解決策:
<?php
$filexml = 'file.xml';
if (file_exists($filexml)){
$xml = simplexml_load_file($filexml);
$file = fopen('file.csv', 'w');
$header = array('sku', 'price');
$customvalue = array('12345', '12367', '12389');
fputcsv($file, $header, ',', '"');
foreach ($xml->PRODUCT as $product){
if ( in_array($product->attributes()->sku, $customvalue ) ) {
$item = array ();
$item[] = $product->attributes()->sku;
$item[] = $product->attributes()->price;
fputcsv($file, $item, ',', '"');
}
fclose($file);
}
?>
しかし、出力は真実で良好ですが、約7000コードの大きなファイルでは300MBのcsvファイルになるため、不要なコードを削除する必要があります。
これが出力です。
12345,129
12345,129,12356,150
12367,160
12389,190
大きなファイルでは、これを取得しています:
12345,129
12345,129,123456,150,12367,160
12389,190,123456,150,12367,160,12345,129
12399,200
12399,200,12345,129,12389,160,123456,150
12399,200,12345,129,12389,160,123456,150,12399,200,12345,129,12389,160,123456,150
配列で指定されたコードは最初に右側の列にありますが、最後にこれは大きな csv ファイルを作成しています。結果のタイムアウトまたはメモリ不足。
ありがとう