Я собираю некоторые XML и преобразовать его в CSV, как этот пост PHP — извлекает правильные значения XML, если элементы имеют похожие теги на запись. Если у меня есть неправильный элемент Date, такой как ‘0000-00-00’ … в CSV, я хочу, чтобы он был пустым ».
Это моя структура
Элементы XML:
<abc:ABC>5EXZX4LPK</abc:ABC>
<abc:Date>0000-00-00</abc:Date>
<abc:Name>I Bornheim</abc:Name>
php xpath xmlreader:
fputcsv(
$output,
[
$xpath->evaluate('string(abc:ABC)', $node),
$xpath->evaluate('string(abc:Entity/abc:Date)', $node)
$xpath->evaluate('string(abc:Entity/abc:Name)', $node)
]
);
Выход:
5EXZX4LPK,0000-00-00,"I Bornheim"
Желаемый результат:
5EXZX4LPK,,"I Bornheim"
Как я могу сделать это?
Вы можете проверить, является ли это действительной датой, разложив ее на год-месяц-день, а затем используя checkdate()
…
$date = $xpath->evaluate('string(abc:Entity/abc:Date)', $node);
$parts = explode("-", $date);
$date = (count($parts)== 3) &&
checkdate($parts[1], $parts[2], $parts[0]) ? $date : '';
Это взрывает дату с -
и проверяет, что есть 3 части и что все части составляют действительную дату.
Других решений пока нет …