0

所以我有一个类似于此的 XML 文件:

<container>
<example1>some text</example1>
<example2>some text</example2>
<example3>some text</example3>
<example4>some text</example4>
</container>
<container>
<example1>some text</example1>
<example2>some text</example2>
<example4>some text</example4>
</container>

基本上,如果example3不包含任何信息,XML 作者决定将其完全省略。问题是,当我使用我的脚本转换为 CSV 时,这个特定的 XML 文件无法正确转换为 CSV,因为第二个中的文本显示在CSV 文件example4的标题下。example3

这是我通常必须与其他 XML 文件一起使用的 PHP 脚本。

$file='input.xml';
if (file_exists($file)) {
    $xml = simplexml_load_file($file);
    $f = fopen('output.csv', 'w');

    // array to hold the field names
    $headers = array(); 
    // loop through the first set of fields to get names
    foreach ($xml->container->children() as $field) { 
        // put the field name into array
        $headers[] = $field->getName(); 
    }
    // print headers to CSV
    fputcsv($f, $headers, ',', '"');

    foreach ($xml->container as $information) {
        fputcsv($f, get_object_vars($information), ',', '"');
    }
    fclose($f);
}

我不知道如何预定义我需要的标题并将正确的信息插入到 CSV 的正确列中。

任何指针都非常感谢。

谢谢

麦克风

4

1 回答 1

1

如果您的第一个条目始终显示所有字段,那么它足以遍历每一行的标题字段并查看当前行是否包含所有条目。

foreach ($xml->container as $information) {
    $vars = get_object_vars($information);
    $line = array();
    foreach($headers as $field) {
        $line[] = isset($vars[$field]) ? $vars[$field] : '';
    }
    fputcsv($f, $line, ',', '"');
}
于 2013-09-30T23:40:35.267 回答