-1

私は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>
  </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 で始まる私の製品コードは、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;

?>

これを修正するために私ができることを誰かが知っていますか?

現在、素晴らしいCSVを生成していますが、上記のビットが欠けています。

4

1 に答える 1

0

csv ファイルに01,02と の値を追加する必要があるとします。03

csv の作成中に、csv ファイルに 01,02,03 を渡すだけでは、csv ファイルを開いたときに 0 の値が表示されません。

この問題を解決するには、'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);
    }
?>
于 2013-09-20T18:54:14.477 に答える