我需要将第一行放在XML文件的CSV文档中。我每次都获得包含数据的文件,但没有第一行。如果您有任何疑问,请在此处发布。非常感谢。
PHP文件
<?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);
}
XML文件
<PRODUCTS>
<PRODUCT>
<CODE>3006.01.32.9000</CODE>
<EAN>40034742</EAN>
<MANUFACTURER>SAMPLE</MANUFACTURER>
<NAME>NAME OF PRODUCT</NAME>
<URL>
https://sampleweb.cz/
</URL>
<IMGURL>https://sampleweb.cz/tmp_o/11928/img0.jpg</IMGURL>
<IMGURL_WATERMARK>https://sampleweb.cz/tmp/11928/img0.jpg
</IMGURL_WATERMARK>
<ACTUAL_PRICE>2847.15</ACTUAL_PRICE>
<ACTUAL_PRICE_VAT>3445</ACTUAL_PRICE_VAT>
<PRICE>2847.15</PRICE>
<PRICE_VAT>3445</PRICE_VAT>
<CATEGORY>Stojací lampy</CATEGORY>
<ALL_CATEGORIES />
<CATEGORY_DESCRIPTION />
<AVAILABILITY>0</AVAILABILITY>
<CONTENT>http://sampleweb.cz.cz/</CONTENT>
<ATTRIBUTES>
<ATTRIBUTE>
<NAME>Stínítko</NAME>
<VALUE>Ø130</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Životnost</NAME>
<VALUE>20000h</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Index podání barev</NAME>
<VALUE>Ra 80</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Vypínač</NAME>
<VALUE>ne</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Záruční doba</NAME>
<VALUE>5 let</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Hmotnost g</NAME>
<VALUE>4,676kg</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Třída ochrany</NAME>
<VALUE>II</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Termín dodání</NAME>
<VALUE>1-2 týdny</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Kolekce</NAME>
<VALUE>TWIN</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Patice</NAME>
<VALUE>LED</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Ochrana IP</NAME>
<VALUE>IP20</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Max. příkon světelného zdroje</NAME>
<VALUE>4,6W</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Barva</NAME>
<VALUE>matná mosaz</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Světelný tok</NAME>
<VALUE>400lm</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Počet světelných zdrojů</NAME>
<VALUE>1</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Výška v mm</NAME>
<VALUE>1570</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Včetně světelného zdroje</NAME>
<VALUE>ano</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Napájecí napětí</NAME>
<VALUE>230V</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Energetická účinnost</NAME>
<VALUE>A+</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Teplota barvy světla</NAME>
<VALUE>3000K</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Výkon</NAME>
<VALUE>4,6W</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Hloubka v mm</NAME>
<VALUE>470</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Výrobce</NAME>
<VALUE>WOFI</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
<ATTRIBUTE>
<NAME>Barva hlavní</NAME>
<VALUE>matná mosaz</VALUE>
<PRICE>0</PRICE>
<PRICE_VAT>0</PRICE_VAT>
<AVAILABILITY>0</AVAILABILITY>
</ATTRIBUTE>
</ATTRIBUTES>
<ADDITIONAL_IMAGES>
<IMAGE>
<IMGURL>https://sampleweb.cz.cz/tmp_o/11928/img1.jpg</IMGURL>
<IMGURL_WATERMARK>https://sampleweb.cz/tmp/11928/img1.jpg
</IMGURL_WATERMARK>
</IMAGE>
</ADDITIONAL_IMAGES>
</PRODUCT>
</PRODUCTS>
答案 0 :(得分:0)
您的代码有很多问题-$productr
数组被创建为无意义的多维数组,并且输出处于循环中-尽管<products>
仅有1个子元素所以无论如何它只会做一次。
要基于<ATTRIBUTE>
值提取<NAME>
元素之一,此代码还使用XPath首先在<PRODUCT>
中找到元素,然后返回<VALUE>
。这是通过'//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);