引入MiFID 2后,我想分析来自GLEIF的LEI数据。
数据是XML格式,但男孩!很难解析。
我尝试了代码(见下文),几乎完全冻结了我的机器,然后给出了这个错误:
AttributeError: no such child: {http://www.gleif.org/data/schema/leidata/2016}pyval.
数据的结构非常简单,但文件很大。尽管如此,我认为主要的罪魁祸首是使用特殊字符,即标签中的冒号"lei:"
,请看这个缩短的例子:
<lei:LEIData xmlns:gleif="http://www.gleif.org/concatenated-file/header-extension/2.0" xmlns:lei="http://www.gleif.org/data/schema/leidata/2016">
<lei:LEIRecords>
<lei:LEIRecord>
<lei:LEI>029200137F2K8AH5C573</lei:LEI>
</lei:LEIRecord>
</lei:LEIRecords>
</lei:LEIData>
有任何帮助吗?
我在删除lei:LEIHeader
部分之后在pastebin上发布了一个更大的示例:https://pastebin.com/UbrM5mVp。
请参阅下面的python代码(借鉴Wes McKinney的书,第6.1节):
from lxml import objectify
path = '20180104-gleif-concatenated-file-lei2.xml'
data = []
parsed = objectify.parse(open(path))
root = parsed.getroot()
for child in root:
print(child.tag, child.attrib)
for elt in root.INDICATOR:
el_data = {}
for child in elt.getchildren():
el_data[child.tag] = child.pyval
data.append(el_data)
perf = pd.DataFrame(data)
答案 0 :(得分:0)
有同样的问题:
import xmltodict
with open('LEIStuff.xml',encoding="utf8") as datafile:
doc = xmltodict.parse(datafile.read())
for row in doc['LEIData']['LEIRecords']['LEIRecord']:
try:
#Lei Number
print(row['LEI'],'-----------------------------')
except Exception:
pass
try:
#LegalNumber
print(row['Entity']['LegalName']['#text'])
print('===[LegalName]===')
except Exception:
pass
[...]以及您想要使用的所有字段: 来自这个网站
https://www.gleif.org/en/about-lei/common-data-file-format/lei-cdf-format/lei-cdf-format-version-2-1
编辑:
AttributeError:没有这样的孩子 - LEI XML数据并不总是相同 - 每个记录的结构有点不同 - 有时候它和额外字段或缺少字段 - 我已经使用&#34; TRY:&#34;在python中,但每个字段必须按行完成(我认为)。
编辑ver2:
当你试图从连接的LEI文件中获取数据时,结构与小fies中的结构不同。
然后你可以使用:
for row in doc['lei:LEIData']['lei:LEIRecords']['lei:LEIRecord']:
但是当您尝试使用#text访问字段时:
LegalName = row['lei:Entity']['lei:LegalName']['#text']
其他字段将是这样的: Legal_PostalCode = row [&#39; lei:Entity&#39;] [&#39; lei:LegalAddress&#39;] [&#39; lei:PostalCode&#39;]
希望得到帮助。