Как конвертировать сложный XML в CSV с помощью Python - PullRequest
0 голосов
/ 15 октября 2018

Мне нужно конвертировать XML в CSV.я попробовал библиотеку xmlutils, я не мог получить ожидаемые поля.на самом деле мой XML не имеет общих тегов в дереве XML.xml sample:

<service.className>
    <Id>3001</Id>
    <sId>12.*</sId>
    <qId>1</qId>
    <timeR>123</timeR>
    <pId>1/1/7</pId>
    <sMode/>
    <highipvalue>1</highipvalue>
    <highipvalue2>1</highipvalue2>
    <highipvalue3>1</highipvalue3>
</service.className>
<service.className>
    <Id>3001</Id>
    <sId>12.*</sId>
    <policy>2</policy>
    <timeR>123</timeR>
    <pId>1/1/7</pId>
    <sMode>mode1</sMode>
    <medipvalue>1</medipvalue>
    <medipvalue2>1</medipvalue2>
    <medipvalue3>1</medipvalue3>
</service.className>
<service.className>
    <Id>3001</Id>
    <sId>12.*</sId>
    <policy>3</policy>
    <timeR>123</timeR>
    <pId>1/1/7</pId>
    <sMode>mode2</sMode>
    <lowipvalue>1</lowipvalue>
    <lowipvalue2>1</lowipvalue2>
    <lowipvalue3>1</lowipvalue3>
</service.className>

и т. д., повторяя .......

ожидаемый вывод csv:

Id  sId qid policyid    timeR   pId sMode   highipvalue highipvalue2    highipvalue3    medipvalue  medipvalue2 medipvalue3 lowipvalue  lowipvalue2 lowipvalue3
3001    12.*    1   0   123 1/01/2007   0   1   1   1   0   0   0   0   0   0
3001    12.*    0   2   123 1/01/2007   mode1   0   0   0   1   1   1   0   0   0
3001    12.*    0   3   123 1/01/2007   mode2   0   0   0   0   0   0   1   1   1

но теперь я получаю поляв CSV только первое дерево элементов XML, как показано ниже

Id  sId qid policyid    timeR   pId sMode   highipvalue highipvalue2    highipvalue3
3001    12.*    1   0   123 1/01/2007       1   1   1
3001    12.*    0   2   123 1/01/2007   mode1   1   1   1
3001    12.*    0   3   123 1/01/2007   mode2   1   1   1

код, который я пытался:

import xml.etree.ElementTree as et
from xmlutils.xml2csv import xml2csv
out_csv_path=csv path
in_xml_path=xml path
converter = xml2csv(in_xml_path, out_csv_path, encoding="utf-8")
converter.convert(tag="className",buffer_size=1000,quotes=False)

любая помощь высоко ценится.

Заранее спасибо, Мани

...