我对python编程相当陌生。我们最近参与了一个项目,我需要将xml文档转换成文本或csv格式,这样我们就可以将其加载到hadoop中,并通过impala将其呈现给用户。下面是一个示例xml,我正在寻找如下所示的输出格式。我不想直接寻求帮助,但因为这对我来说是全新的,所以我要向你们这些Maven求助。
示例xml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<GISF XMLNS="TOOL.COM">
<HEADER>
<FILE_NAME>TOY.xml</FILE_NAME>
<DATE>20130611</DATE>
<TIME>14:02:00</TIME>
</HEADER>
<ISSUER>
<ID>123456</ID>
<INS>
<INS_ID>34685</INS_ID>
<SERIES></SERIES>
<MAT>
<MAT_ID>2233445566</MAT_ID>
<C_TYPE>BCG</C_TYPE>
<COL_TYPE></COL_TYPE>
<MAT_RAT_GR>
<RGC>STR</RGC>
<MAT_RA>
<TYPE>FC</TYPE>
<RAT>GGG</RAT>
</MAT_RA>
<MAT_RA>
<TYPE>FC2</TYPE>
<RAT>GGG2</RAT>
</MAT_RA>
</MAT_RAT_GR>
<IDENTIFIER NAME="ABCD" VALUE="GOR345"></IDENTIFIER>
<IDENTIFIER NAME="EFGH" VALUE="QELH7876"></IDENTIFIER>
</MAT>
</INS>
</ISSUER>
<ISSUER>
<ID>777888</ID>
<INS>
<INS_ID>444555</INS_ID>
<SERIES></SERIES>
<MAT>
<MAT_ID>444555666</MAT_ID>
<C_TYPE>BCD</C_TYPE>
<COL_TYPE></COL_TYPE>
<MAT_RAT_GR>
<RGC>STR</RGC>
<MAT_RA>
<TYPE>FC3</TYPE>
<RAT>GGG4</RAT>
</MAT_RA>
</MAT_RAT_GR>
<IDENTIFIER NAME="ABCD" VALUE="GOR345"></IDENTIFIER>
<IDENTIFIER NAME="EFGH" VALUE="QELH7876"></IDENTIFIER>
</MAT>
</INS>
</ISSUER>
</GISF>
预期产量:
ID INS_ID MAT_ID TYPE RAT
123456 , 34685 , 2233445566 , FC , GGG
123456 , 34685 , 2233445566 , FC2 , GGG2
777888 , 444555 , 444555666 , FC3 , GGG4
我试过下面的脚本,它给了我csv格式的输出。但是我真的认为有一个更好的方法可以做到这一点,因为我正在手动遍历不同的级别,并对标记名进行硬编码。
import xml.etree.ElementTree as ET
tree = ET.parse("GISF.xml")
root = tree.getroot()
for ISSUER in root.findall('ISSUER'):
Iss_id = ISSUER.find('ID').text
for INSTRUMENT in ISSUER.findall('INS'):
ins_id = INSTRUMENT.find('INS_ID').text
for MATURITY in INSTRUMENT.findall('MAT'):
may_id = MATURITY.find('MAT_ID').text
line = Iss_id+','+ins_id+','+may_id
print (line)
生成输出:
123456,34685,2233445566
777888,444555,444555666
1条答案
按热度按时间b5buobof1#
https://pypi.python.org/pypi/xmlutils
这是一个好的开始。