У меня есть гигантский XML-файл (около 10 Гб), который мне нужно преобразовать в CSV. Теперь этот файл будет содержать информацию о многочисленных клиентах. Мне нужно преобразовать его в формат CSV. Проблема заключается в том, что у многих клиентов будут дополнительные поля, которые другие клиенты привыкли, и некоторые из полей будут повторяться. Пример XML является:Perl XML :: Twig. Гигантская обработка файлов. Как обрабатывать повторяющиеся enteries & enteries, которых нет
<customer>
<customerID>1</customerID>
<auc>
<algoId>0</algoId>
<kdbId>1</kdbId>
<acsub>1</acsub>
</auc>
</customer>
<customer>
<customerID>2</customerID>
<auc>
<algoId>0</algoId>
<kdbId>1</kdbId>
<acsub>1</acsub>
<extraBit>12345</extraBit>
</auc>
<auc>
<algoId>2</algoId>
<kdbId>3</kdbId>
<acsub>3</acsub>
<extraBit>67890</extraBit>
</auc>
<customOptions>
<odboc>0</odboc>
<odbic>0</odbic>
<odbr>1</odbr>
<odboprc>0</odboprc>
<odbssm>0</odbssm>
</customOptions>
</customer>
Теперь, как вы можете видеть, первый клиент имеет только 1 АУК блок, но второй из них имеет 2, кроме того, он также имеет дополнительный тег в ППК, который extraBit. Теперь вопросы:
я должен обрабатывать один клиент одновременно (от одного клиента к/клиента, а затем так далее), а 10 Гб atonce приведет к краху системы.
Я пытаюсь использовать XML прутик в цикле, и когда я пытаюсь extraBit для Клиента 1, завершает программу «неопределенного значения»:
печати $ на клиент> first_child («extraBit») - > текст()
Невозможно вызвать метод «текст» на неопределенное значение в xml-tags.pl линии 50.
для дополнительных АУК для клиента Я хочу, чтобы выводиться в формате CSV файл как:
клиентID, algoId, kdbId , Acsub, extraBit, algoId2, kdbId2, acsub2, extraBit2
1,0,1,1 ,,,,,,
2,0,1,1,1234,2,3,3,67890
я как-то сложилось ощущение, что вы должны скорее выполнить это с процессором XSLT. Взгляните на http://xmlsoft.org/XSLT/xsltproc2.html и немного почитайте о XSLT. Базовая обработка на самом деле довольно проста. http://stackoverflow.com/questions/7294344/convert-xml-to-csv-using-xslt – simbabque
И, пожалуйста, покажите еще несколько своих кодов Perl. Трудно понять, что у вас уже есть. – simbabque
@simbabque наоборот, использование XSLT потребует разбора всего 10 ГБ файла в память за один раз. Использование 'XML :: Twig' и, в частности, механизма' twig_handlers', означает, что вы можете проходить через клиентов по очереди потоковым способом. –