通过PHP将产品从XML导入CSV
我需要将XML文件中的第一行放在CSV文档中。我每次都会得到包含数据的文件,但我没有第一行。如果你有任何错误的想法,请发到这里。非常感谢大家 PHP文件通过PHP将产品从XML导入CSV,php,xml,Php,Xml,我需要将XML文件中的第一行放在CSV文档中。我每次都会得到包含数据的文件,但我没有第一行。如果你有任何错误的想法,请发到这里。非常感谢大家 PHP文件 <?php // How to Generate CSV File from Array in PHP Script $url = 'https://samplewebsitegoesherewithdata.xml'; $xml = file_get
<?php
// How to Generate CSV File from Array in PHP Script
$url = 'https://samplewebsitegoesherewithdata.xml';
$xml = file_get_contents($url);
$xmls= simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOEMPTYTAG) or die("Error: Cannot create object");
foreach($xmls->children() as $product) {
$productr = array(
"produkt" => array(
"name" => $product->CODE,
"man" => $product->MANUFACTURER
),
);
$filename = 'export.csv';
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$filename");
$output = fopen("php://output", "w");
$header = array_keys($productr[0]);
fputcsv($output, $header);
foreach($productr as $row)
{
fputcsv($output, $row);
}
fclose($output);
}
您的代码有很多问题-您的
$productr
数组被创建为一个多维数组,它是无意义的,并且输出在循环中-尽管
只有一个子元素,因此无论如何只能执行一次
要根据
值提取
元素之一,此代码还使用XPath首先在
中查找元素并返回
。这是通过'//ATTRIBUTE[NAME=“Životnost”]/VALUE'
完成的,并且可以很容易地用所需的相应属性进行更改。在xpath()
返回匹配节点的列表时,使用[0]
提取第一个元素
此代码在开始时设置输出,并仅第一次写入头
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$filename");
$output = fopen("php://output", "w");
$headerOutput = true;
foreach($xmls->PRODUCT as $product) {
$attr = $product->xpath('//ATTRIBUTE[NAME="Životnost"]/VALUE')[0];
$productr = array("name" => $product->CODE,
"man" => $product->MANUFACTURER,
"value" => $attr
);
if ( $headerOutput ) {
$header = array_keys($productr);
fputcsv($output, $header);
$headerOutput = false;
}
fputcsv($output, $productr);
}
fclose($output);
有几个问题-但是如果你修复了你的缩进,你会看到一个明显的问题。您正在为从xml中读取的每个产品执行底部的代码。请不要使用大写字母吗?一旦您解决了这个问题$productr[]=['name'=>$product->CODE,'man'=>$product->MANUFACTURER]在您的xml读取循环中会更有意义,因为这样您就拥有了一系列产品,而不仅仅是一个不断被覆盖的产品。非常感谢您,它工作得非常好。你救了我的命。我还有另一个问题。它可以使csv文件之间的分隔;不,如果你看的话,你可以指定分隔符。当然可以,你能帮我做另一件事吗?在XML中,ATRIBUTE中有许多ATRIBUTE,我需要搜索其中一个,例如“Životnost”,并将该ATRIBUTE的CSV值放入其中。XML中的每个项都有相同的ATRIBUTES名称,但顺序不同。所以这就是为什么我需要循环所有心房的元素,找到“Životnost”,然后得到他的值。我不确定它是否清楚我需要什么,但如果不清楚,我将尝试以另一种方式解释它。谢谢。我已经更新了它-行
$attr=$product->xpath('//ATT..
)。
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$filename");
$output = fopen("php://output", "w");
$headerOutput = true;
foreach($xmls->PRODUCT as $product) {
$attr = $product->xpath('//ATTRIBUTE[NAME="Životnost"]/VALUE')[0];
$productr = array("name" => $product->CODE,
"man" => $product->MANUFACTURER,
"value" => $attr
);
if ( $headerOutput ) {
$header = array_keys($productr);
fputcsv($output, $header);
$headerOutput = false;
}
fputcsv($output, $productr);
}
fclose($output);