CSV到XML添加更多标题

时间:2015-04-25 12:09:31

标签: php xml csv

我遇到了以下问题:

我有一个csv文件,我可以通过php脚本转换为XML。

这样,每个字段都位于xml的同一行中,我希望product_sku字段位于不同的行下,例如将其称为SKU_row

CSV看起来像这样:

my CSV file

XML看起来像这样:

my XML file

我运行以将CSV转换为XML的PHP​​文件代码:

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', true);
ini_set('auto_detect_line_endings', true);

function PrepareXMLName($PrepareString)
{

    $PrepareString = str_replace(" ","",$PrepareString);
    $PrepareString = preg_replace('#\W#', '', $PrepareString);
    $PrepareString = str_replace("ZSPAZESZ","",$PrepareString);
    $PrepareString = strtolower($PrepareString);

    return $PrepareString;
}   

$inputFilename    = 'faszom.csv';
$outputFilename   = 'faszom.xml';

// Open csv to read
$inputFile  = fopen($inputFilename, 'rt');

// Get the headers of the file
$headers = fgetcsv($inputFile);

// Create a new dom document with pretty formatting
$doc  = new DomDocument();
$doc->formatOutput   = true;

// Add a root node to the document
$root = $doc->createElement('rows');
$root = $doc->appendChild($root);

// Loop through each row creating a <row> node with the correct data
while (($row = fgetcsv($inputFile)) !== FALSE)
{
    $container = $doc->createElement('row');
    foreach ($headers as $i => $header)
        {
        $header = str_replace(chr(32),"_",trim($header));
        $header = strtolower($header);
        if($header==''){ $header = 'empty';}
        $header = PrepareXMLName($header);
        if(is_numeric($header)) { $header = "number-". $header; }
        //echo "HERE: " . $header . "<br />";  
        $child = $doc->createElement($header);
        $child = $container->appendChild($child);
        $value = $doc->createTextNode($row[$i]);
        $value = $child->appendChild($value);
        }
    $root->appendChild($container);
}

header("Content-type: text/xml");
$strxml = $doc->saveXML();
$handle = fopen($outputFilename, "w");
fwrite($handle, $strxml);
fclose($handle);

echo $doc->saveXML();

如何在这个PHP文件中,让它将product_sku字段放在不同的行下,与客户数据所在的行分开?

1 个答案:

答案 0 :(得分:0)

XML允许您进一步分组。而不是你的扁平行模型:

<rows>
    <row>
        <product_sku>L162L</product_sku>
        <order_entity_id>31</order_entity_id>
        <order_customer_firstname>Teszt</order_customer_firstname>
        <product_qty_ordered>1.0000</product_qty_ordered>
    </row>

您可以根据数据的上下文进一步分组,例如按订单,产品和客户:

<rows>
    <row>
        <product>
            <sku>L162L</sku>
            <qty_ordered>1.0000</qty_ordered>
        <product>
        <order>
            <entity_id>31</entity_id>
            <customer>
                <firstname>Teszt</firstname>
            </customer>                
        </order>            
    </row>

但这完全取决于你想要的 ,而你的问题我没有看到任何理由说明为什么这样做,那或任何其他方式也不妨碍你的方式做你想做的事。