我目前正在尝试使用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>
答案 0 :(得分:0)
<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
符号的存储方式几乎与庄园的存储方式相同。因此,它们的提取方式类似于如何提取遗产:
symlist = xmldoc.getElementsByTagName('Symbol')
print "There are currently %d symbols" % len(symlist)
for s in symlist:
print s.attributes['SymbolName'].value