2013-09-20 2 views
-1

У меня есть XML-simplexml_load_file опуская 00 из XML в CSV

Пример:

<?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> 

Я использую simplexml_load_file преобразовать в CSV. Он отлично работает, но 2 проблемы. Во-первых, мои коды продуктов, начинающиеся с 00, теряют 00 в генерации CSV. Поэтому мне как-то нужно держать это как текстовое поле.

Во-вторых, здесь я также хотел бы разместить заголовки столбцов.

Это код, который я адаптировал до сих пор:

<?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; 

?> 

Кто-нибудь знает, что я могу сделать, чтобы исправить это?

В настоящее время он генерирует CSV, который является большим, но просто не хватает вышеуказанных бит.

ответ

0

Предположим, что вам нужно добавить 01, 02 и 03 значения в ваш файл csv.

При создании вашего csv, если вы просто передаете 01,02,03 в CSV-файл, значение 0 не будет отображаться при открытии файла csv.

Для решения этой проблемы просто добавьте файл как '01, '02, '03. И нули будут отображаться при открытии файла.

Не забудьте добавить знак ' перед значением столбца.

Редактировать

Вы не упомянули, если имена столбцов фиксированными или зависит ли это от вашего XML.

Я постараюсь ответить на это исходя из предположения, что имена столбцов не изменяются.

Создайте функцию, которая добавляет ваши данные в файл csv. (Хотя это необязательно.)

function addRowToCsv($data, $filename){ 
    file_put_contents($filename,$data,FILE_APPEND); 
} 

Чтобы добавить имена столбцов, просто вызовите функцию перед циклом foreach.

addRowToCsv("Product Code, Available Stock, Status\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); 
    } 
?> 
+0

Но данные, полученные за пределами моего контроля. Итак, как будет выглядеть код файла? – vikgoy

+0

Также вы знаете, как я могу добавить заголовки столбцов? Спасибо – vikgoy

+0

См. Мой обновленный ответ. – Searock

Смежные вопросы