Php simplexml\u加载\u文件从xml到csv省略00
我有一个XML 样本:Php simplexml\u加载\u文件从xml到csv省略00,php,xml,csv,simplexml,Php,Xml,Csv,Simplexml,我有一个XML 样本: <?xml version="1.0" encoding="utf-8"?> <StockValues> <Product> <Product_Code>00380</Product_Code> <Available_Stock>200</Available_Stock> <Due_Date>2013-10-13</Due_Date>
<?xml version="1.0" encoding="utf-8"?>
<StockValues>
<Product>
<Product_Code>00380</Product_Code>
<Available_Stock>200</Available_Stock>
<Due_Date>2013-10-13</Due_Date>
</Product>
<Product>
<Product_Code>00429</Product_Code>
<Available_Stock>200</Available_Stock>
<Due_Date>2013-11-14</Due_Date>
</Product>
<Product>
<Product_Code>00495</Product_Code>
<Available_Stock>200</Available_Stock>
<Due_Date>N/A</Due_Date>
</Product>
<Product>
<Product_Code>0122</Product_Code>
<Available_Stock>200</Available_Stock>
<Due_Date>N/A</Due_Date>
</Product>
<Product>
<Product_Code>0190</Product_Code>
<Available_Stock>200</Available_Stock>
<Due_Date>2013-10-16</Due_Date>
</Product>
<Product>
<Product_Code>052A</Product_Code>
<Available_Stock>200</Available_Stock>
<Due_Date>N/A</Due_Date>
</Product>
<Product>
<Product_Code>052B</Product_Code>
<Available_Stock>200</Available_Stock>
<Due_Date>2013-10-09</Due_Date>
</Product>
<Product>
<Product_Code>052BK</Product_Code>
<Available_Stock>200</Available_Stock>
<Due_Date>2013-09-28</Due_Date>
</Product>
00380
200
2013-10-13
00429
200
2013-11-14
00495
200
不适用
0122
200
不适用
0190
200
2013-10-16
052A
200
不适用
052B
200
2013-10-09
052BK
200
2013-09-28
我正在使用simplexml\u load\u文件转换为CSV。它工作得很好,但有两个问题。首先,我的产品代码以00开头,在生成CSV时丢失了00。因此,我需要将其保留为文本字段
第二,我想把专栏标题也放在这里
这是我迄今为止所采用的代码:
<?php
$filename='test.csv';
if (! file_exists($filename))
{
echo "There's no test file";
}
else
{
echo "There's 1a test file !";
unlink($filename);
}
echo '<br />';
if( ! $xml = simplexml_load_file('1feed2.xml') )
{
echo 'unable to load XML file';
}
else
{
foreach( $xml as $product_record )
{
$prodarray = "\"$product_record->Product_Code\"".","."$product_record->Available_Stock".",END\n";
echo $prodarray;
//echo '<br />';
file_put_contents($filename,$prodarray,FILE_APPEND);
echo "line written <br />";
}
}
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
print $contents;
?>
Product\u code\”,“$Product\u record->Available\u Stock”“,结束\n”;
回波阵列;
//回声“
”;
文件内容($filename、$prodarray、文件附加);
回显“写入的行
”;
}
}
$handle=fopen($filename,“rb”);
$contents=fread($handle,filesize($filename));
fclose($handle);
打印$contents;
?>
有人知道我能做些什么来解决这个问题吗
它当前生成的CSV非常好,但缺少上述位。假设您需要在CSV文件中添加
01
、02
和03
值
创建csv时,如果仅将01、02、03传递给csv文件,则打开csv文件时不会显示0值
要解决此问题,只需附加文件,如'01、'02、'03。打开文件时,将显示零
请记住在列值之前添加“
字符
编辑
您没有提到列名是否是固定的,或者它是否取决于您的xml
假设您的列名不变,我将尝试回答这个问题
创建一个将数据附加到csv文件的函数。(尽管这不是必需的。)
为了添加列名,只需在foreach循环之前调用函数
addRowToCsv(“产品代码、可用库存、状态\n”)代码>
请参阅下面更新的代码
<?php
$filename='test.csv';
if (! file_exists($filename))
{
echo "There's no test file";
}
else
{
echo "There's 1a test file !";
unlink($filename);
}
echo '<br />';
$xml = simplexml_load_file('1feed2.xml');
//avoid unnecessary else and elseif statments.
if(!$xml){
echo 'unable to load XML file';
exit;
}
//adding column names
addRowToCsv("Product Code, Available Stock, Status\n");
foreach($xml as $product_record){
$product_code = (int) $product_record->Product_Code;
$available_stock = (int) $product_record->Available_Stock;
//Add ' character before the column value
$csv_line = "'$product_code,'$available_stock,END\n";
addRowToCsv($csv_line);
}
$handle = fopen($filename, "rb");
if($handle){
$contents = fread($handle, filesize($filename));
fclose($handle);
print $contents;
}
function addRowToCsv($data, $filename){
file_put_contents($filename,$data,FILE_APPEND);
}
?>
产品编码;
$available\u stock=(int)$product\u record->available\u stock;
//在列值之前添加“”字符
$csv_line=“$product_code,$available_stock,END\n”;
addRowToCsv($csv_行);
}
$handle=fopen($filename,“rb”);
如果($handle){
$contents=fread($handle,filesize($filename));
fclose($handle);
打印$contents;
}
函数addrowtosv($data,$filename){
文件内容($filename,$data,file\u APPEND);
}
?>
但数据馈送超出了我的控制范围。那么文件代码会是什么样子呢?你知道如何添加列标题吗?非常感谢。
<?php
$filename='test.csv';
if (! file_exists($filename))
{
echo "There's no test file";
}
else
{
echo "There's 1a test file !";
unlink($filename);
}
echo '<br />';
$xml = simplexml_load_file('1feed2.xml');
//avoid unnecessary else and elseif statments.
if(!$xml){
echo 'unable to load XML file';
exit;
}
//adding column names
addRowToCsv("Product Code, Available Stock, Status\n");
foreach($xml as $product_record){
$product_code = (int) $product_record->Product_Code;
$available_stock = (int) $product_record->Available_Stock;
//Add ' character before the column value
$csv_line = "'$product_code,'$available_stock,END\n";
addRowToCsv($csv_line);
}
$handle = fopen($filename, "rb");
if($handle){
$contents = fread($handle, filesize($filename));
fclose($handle);
print $contents;
}
function addRowToCsv($data, $filename){
file_put_contents($filename,$data,FILE_APPEND);
}
?>