使用minidom将xml文件分解为可管理的文件。蟒蛇

时间:2014-07-17 14:44:22

标签: python xml parsing minidom

我目前正在尝试使用python从一个xml文件创建3个文件。

xml文件中有三种类型的数据,即庄园,符号名称和刻度类型。

我想要3个文本文件,列出3个不同的东西。

这是我目前的代码,它列出了绝对正确的资产:

    from xml.dom import minidom


#Define the xmldoc object
xmldoc = minidom.parse('C:\\Temp\\Symbols.xml')

#Define EstateList by getting Elements by tag name
EstateList = xmldoc.getElementsByTagName('Estate')
#Print Estate List
print "There are currently %d data estates" % len(EstateList)
#print EstateList[0].attributes['EstateName'].value
for s in EstateList:
    print s.attributes['EstateName'].value

#Save Estate List to file
with open('dataestates.txt', 'w') as f:
    f.write("There are currently %d data estates \n" % len(EstateList))
    for s in EstateList:
        f.write(s.attributes['EstateName'].value + "\n")

然而,当我开始查看其他的,符号名称和刻度类型时,我无法获得任何工作,我无法接近它列出刻度类型,我尝试了属性,标签,所有种类

以下是xml代码的示例

   <Estates>
     <Estate EstateName="BBG.DL.BOND.RAW._LIVE">
       <Ticktype>BBG_BGN</Ticktype>
       <Ticktype>BBG_BVAL</Ticktype>
       <Ticktype>BBG_CBBT</Ticktype>
       <Ticktype>BBG_IXEP</Ticktype>
       <Ticktype>BBG_IXSP</Ticktype>
       <Ticktype>BBG_TRAC</Ticktype>
       <Ticktype>BBG</Ticktype>
     </Estate>
     <Estate EstateName="BBG.DL.CCY.RAW._LIVE">
       <Ticktype>BBG</Ticktype>
     </Estate>
</Estates>
<Symbols>
     <Symbol SymbolName="AT0000386073 Corp" Estate="BBG.DL.BOND.RAW._LIVE" TickType="BBG_BGN" />
     <Symbol SymbolName="AT0000386073 Corp" Estate="BBG.DL.BOND.RAW._LIVE" TickType="BBG_BVAL" />
</Symbols>

1 个答案:

答案 0 :(得分:0)

1。蜱

<Ticktype>元素的内部文本存储在子节点中。要访问该文本,您必须找到该孩子。 Node.firstChild应该为你做。找到子节点后,您可以通过Text.data属性获取文本。

因此,给定<Ticktype>元素,您可以找到文本:.firstChild.data

ticklist = xmldoc.getElementsByTagName('Ticktype')
print "There are currently %d tick types" % len(ticklist)
for s in ticklist:
    print s.firstChild.data

节拍类型似乎有重复值。您可以使用set

将它们缩减为唯一列表
tickset = set(s.firstChild.data for s in ticklist)
print "There are %d unique tick types" % len(tickset)
for s in tickset:
    print s

2。符号

符号的存储方式几乎与庄园的存储方式相同。因此,它们的提取方式类似于如何提取遗产:

symlist = xmldoc.getElementsByTagName('Symbol')
print "There are currently %d symbols" % len(symlist)
for s in symlist:
    print s.attributes['SymbolName'].value