提问人:grimx 提问时间:5/18/2023 最后编辑:grimx 更新时间:5/18/2023 访问量:56
PHP 脚本从 CSV 创建 XML 文件,但包含 0 个内容
PHP script creates XML files from CSV's but holds 0 contents
问:
我创建了一个 php 脚本来读取 19 个 csv 文件并规范化数据 - 不保存重复数据(站点 ID、名称和地理编码),只保存每条具有值的记录的属性。我已经打印了 csv 以确保在脚本中加载,并且脚本还制作了 data-site-id 文件,但文件中包含 0 个内容?
<?php
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
// List of CSV files
$csvFiles = [
'data-203.csv',
'data-206.csv',
'data-209.csv',
'data-270.csv',
'data-213.csv',
'data-215.csv',
'data-271.csv',
'data-375.csv',
'data-395.csv',
'data-447.csv',
'data-452.csv',
'data-463.csv',
'data-500.csv',
'data-501.csv',
'data-672.csv',
'data-188.csv',
'data-209.csv',
'data-481.csv',
'data-228.csv',
'data-459.csv',
];
// Loop through each CSV file
foreach ($csvFiles as $csvFile) {
$csvFilePath = __DIR__ . '/' . $csvFile;
// Open the CSV file
if (($handle = fopen($csvFilePath, 'r')) !== false) {
// Create an XMLWriter instance
$xmlWriter = new XMLWriter();
$xmlWriter->openURI(csvFileToXmlFile($csvFile));
$xmlWriter->startDocument('1.0', 'UTF-8');
$xmlWriter->startElement('data');
// Read the CSV file line by line
while (($data = fgetcsv($handle)) !== false) {
// Skip empty lines
if (count($data) === 0) {
continue;
}
// Ensure the array has the necessary indexes
if (count($data) >= 4) {
// Extract the necessary data
$stationId = $data[0];
$name = $data[1];
$geocode = $data[2];
$attribute = $data[3];
// Check if the attribute has a value
if (trim($attribute) !== '') {
// Start XML record element
$xmlWriter->startElement('record');
$xmlWriter->writeAttribute('station_id', $stationId);
$xmlWriter->writeAttribute('name', $name);
$xmlWriter->writeAttribute('geocode', $geocode);
$xmlWriter->writeAttribute('attribute', $attribute);
// End XML record element
$xmlWriter->endElement();
}
}
}
// Close XML elements and file
$xmlWriter->endElement();
$xmlWriter->endDocument();
$xmlWriter->flush();
fclose($handle);
// Output success message
$xmlFile = csvFileToXmlFile($csvFile);
echo "XML file generated successfully: $xmlFile\n";
}
}
// Function to convert CSV file name to XML file name
function csvFileToXmlFile($csvFile) {
$fileParts = pathinfo($csvFile);
$xmlFile = $fileParts['filename'] . '.xml';
return $xmlFile;
}
?>
如前所述,我已经打印了 csv,以确保它们在目录中被读取。我还更改了 $xmlWriter->openURI($csvFileToXmlFile($csvFile));更改为 $xmlWriter->openURI(csvFileToXmlFile($csvFile));。我一直在得到未定义的偏移量 2 和 3。第 52 行和第 53 行的错误也已经消退。
csv 的示例图像,不确定如何发送 https://drive.google.com/file/d/1EUHN4RCJFq-XrIBQNvZphh7vxZDdbf_R/view?usp=share_link
空白 XML - data-481.xml https://drive.google.com/file/d/1pEinOeosPQQRoeQoJHfEb6L_80iD5bqr/view?usp=share_link
答:
你必须学会仔细观察你的数据。这些文件实际上是“SemiColon seperated value”文件文件csv
ssv
您需要做的就是更改这行代码,让分隔符知道分隔符是fgetcsv()
;
while (($data = fgetcsv($handle,10000,';')) !== false) {
data-481.csv 的第二个问题
所有行的列都是空的$data[1], $data[2], $data[3]
所以
$attribute = $data[3];
if (trim($attribute) !== '') {
控制是否将行写入 XML 文件失败,因此不写入任何数据
评论
.csv
;
评论