我遇到了以下问题:
我有一个csv文件,我可以通过php脚本转换为XML。
这样,每个字段都位于xml的同一行中,我希望product_sku
字段位于不同的行下,例如将其称为SKU_row
。
CSV看起来像这样:
XML看起来像这样:
我运行以将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
字段放在不同的行下,与客户数据所在的行分开?
答案 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>
但这完全取决于你想要的 ,而你的问题我没有看到任何理由说明为什么这样做,那或任何其他方式也不妨碍你的方式做你想做的事。