我只想将指定值从 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 文件。并导致超时或内存不足。
谢谢