PHP - конвертировать XML в CSV с помощью fputcsv - PullRequest
0 голосов
/ 30 марта 2020

Как преобразовать следующие XML в CSV, используя fputcsv

<?xml version="1.0" encoding="utf-8"?>
<PRODUCTINFORMATION>
  <SUPPLIER>Company</SUPPLIER>
  <PRODUCTS>
    <PRODUCT>
      <PRODUCT_NUMBER>AR1249-16</PRODUCT_NUMBER>
      <PRODUCT_BASE_NUMBER>AR1249</PRODUCT_BASE_NUMBER>
      <PRODUCT_ID>10134325</PRODUCT_ID>
    </PRODUCT>
    <PRODUCT>
      <PRODUCT_NUMBER>AR1253-16</PRODUCT_NUMBER>
      <PRODUCT_BASE_NUMBER>AR1253</PRODUCT_BASE_NUMBER>
      <PRODUCT_ID>10134300</PRODUCT_ID>
    </PRODUCT>
    <PRODUCT>
      <PRODUCT_NUMBER>AR1424-03</PRODUCT_NUMBER>
      <PRODUCT_BASE_NUMBER>AR1424</PRODUCT_BASE_NUMBER>
      <PRODUCT_ID>10147594</PRODUCT_ID>
    </PRODUCT>
   </PRODUCTS>
</PRODUCTINFORMATION>

My PHP is:

<?php

$xml = simplexml_load_file('prodinfo.xml');
$csv = fopen('prodinfo.csv', 'w');

    foreach($xml->PRODUCTS->PRODUCT as $element) {
        foreach($element->PRODUCT_NUMBER as $productNumber){
            foreach($element->PRODUCT_BASE_NUMBER as $productBaseNumber){
                echo $productNumber ,";", $productBaseNumber. '<BR>' ;

                //fputcsv($csv, get_object_vars($productNumber),',','"'); 
                //fclose($csv);

                }
            }
        }
?>

1 Ответ

0 голосов
/ 30 марта 2020

Вам не нужно так много циклов foreach(), чтобы получить каждый продукт. Также легче построить массив из каждого элемента, так как он фиксирован и содержит только несколько полей ...

$csv = fopen('prodinfo.csv', 'w');

fputcsv($csv, ["PRODUCT_NUMBER","PRODUCT_BASE_NUMBER","PRODUCT_ID"]
    ,',','"');
foreach($xml->PRODUCTS->PRODUCT as $element) {
    fputcsv($csv, [(string)$element->PRODUCT_NUMBER, 
        (string)$element->PRODUCT_BASE_NUMBER,
        (string)$element->PRODUCT_ID
    ],',','"');
}
fclose($csv);
...