Итак, я посмотрел и попробовал несколько вещей, чтобы преобразовать файл XML в файл CSV.Я попробовал следующие способы:
XSLT
: получить XSLT
для данного XML, а затем сформировать CSV.Но это слишком сложно поддерживать, так как мы не знаем, какой XML-файл мы получим, что делает его не общим решением. - Использование Apache
Digester
SAXP
иJAXP
Проблема двух вышеперечисленных подходов заключается в том, что для этого требуется определить ваши java-объекты ранее, и, таким образом, это опять-таки узкое место для создания такого количества классов, что мы не знаем, какой там будет шаблон XML.Он будет меняться каждый раз. - Использование
DocumentBuildFactory
и его разбор.Это работает для общих файлов XML, но медленно для файлов, которые находятся в диапазоне от 5 МБ до 1 ГБ.Мои XML-файлы точно не будут больше 1 ГБ.
Помимо этих подходов, которые я уже пробовал, есть какие-нибудь идеи о том, как я могу достичь этого программно и быстрее, чем выше?Я рассмотрел несколько онлайн-инструментов, которые за очень короткое время преобразуют любой XML-файл в CSV-файлы, и они, похоже, работают для любого общего XML-файла.Любые предложения?
Вот несколько примеров, которые также могут измениться:
<?xml version="1.0"?>
<Company>
<Employee id="1">
<Email>tp@xyz.com</Email>
<artist>Bob Dylan</artist>
<country>USA</country>
</Employee>
</Company>
Это самый простой.Ожидаемый результат:
Company/Employee/Email,Company/Employee/artist,Company/Employee/country,Company/Employee/_id
tp@xyz.com,Bob Dylan,USA,1
Другой пример
<?xml version="1.0"?>
<Company>
<Employee id="1">
<Email>tp@xyz.com</Email>
<UserData id="id32" type="AttributesInContext">
<UserValue value="7in" title="Height"></UserValue>
<UserValue value="" title="Weight"></UserValue></UserData>
</Employee>
<Employee id="2">
<Email>tp@xyz.com</Email>
<UserData id="id33" type="AttributesInContext">
<UserValue value="6in" title="Height"></UserValue>
<UserValue value="" title="Weight"></UserValue></UserData>
</Employee>
<Employee id="3">
<Email>tp@xyz.com</Email>
<UserData id="id34" type="AttributesInContext">
<UserValue value="4in" title="Height"></UserValue>
<UserValue value="" title="Weight"></UserValue></UserData>
</Employee>
</Company>
Ожидаемый результат:
Email,UserData/UserValue/0/_value,UserData/UserValue/0/_title,UserData/UserValue/1/_value,UserData/UserValue/1/_title,UserData/_id,UserData/_type,_id
tp@xyz.com,7in,Height,,Weight,id32,AttributesInContext,1
tp@xyz.com,6in,Height,,Weight,id33,AttributesInContext,2
tp@xyz.com,4in,Height,,Weight,id34,AttributesInContext,3
Это сложный бит.И это может стать более сложным и вложенным и может достигать 1 ГБ при макс.