PHP 脚本从 CSV 创建 XML 文件,但包含 0 个内容

问题描述 投票:0回答:1

我创建了一个 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));。我也收到了 Undefined offset 2 & 3. Line 52 & 53 错误,这些已经消退了。

csv 的示例图像,不确定如何发送 https://drive.google.com/file/d/1EUHN4RCJFq-XrIBQNvZphh7vxZDdbf_R/view?usp=share_link

csv file

php xml csv fgets fgetcsv
1个回答
0
投票

你必须学会仔细查看你的数据。

csv
文件实际上是
ssv
文件“分号分隔值”文件

您需要做的就是更改这行代码,让

fgetcsv()
知道分隔符是
;

    while (($data = fgetcsv($handle,10000,';')) !== false) {
© www.soinside.com 2019 - 2024. All rights reserved.