我想使用Python xml ElementTree API解析以下XML文件。
paragraphs
id story_id user_id body
----------------------------
1 1 1 Sample data
2 1 1 Sample data
3 2 1 Sample data
4 1 2 Sample data
5 1 3 Sample data
6 5 1 Sample data
userprop
id supervisor_id username
----------------------------
1 1 user_abc
2 1 user_def
3 2 user_ghi
users
name full_name
---------------------
user_abc Jack Jackson
user_def Bill Winters
user_ghi Sharon Staples
supervisors
id full_name
1 Steve Doppler
2 Frank Frampton
expected output
id story_id user_id body main_supervisor_count main_supervisor
---------------------------------------------------------------------------
1 1 1 Sample data 3 Steve Doppler
2 1 1 Sample data 3 Steve Doppler
3 2 1 Sample data 1 Steve Doppler
4 1 2 Sample data 3 Steve Doppler
5 1 3 Sample data 1 Frank Frampton
6 5 1 Sample data 1 Steve Doppler
在这个示例代码中,我尝试查找/ foos / foo_table / fooelem / fname下的所有元素,但显然findall在运行此代码时找不到任何内容。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foos>
<foo_table>
<!-- bar -->
<fooelem>
<fname>BBBB</fname>
<group>SOMEGROUP</group>
<module>some module</module>
</fooelem>
<fooelem>
<fname>AAAA</fname>
<group>other group</group>
<module>other module</module>
</fooelem>
<!-- bar -->
</foo_table>
</foos>
我对ElementTree API没有经验,但我使用了https://docs.python.org/2/library/xml.etree.elementtree.html#example下的示例。为什么我的情况不起作用?
答案 0 :(得分:1)
这是因为您使用的路径始于根元素(foos
)之前。
请改用:foo_table/fooelem/fname
答案 1 :(得分:0)
foos
是您的root
,您需要在findall
下面开始,例如。
root = tree.getroot()
for i in root.findall("foo_table/fooelem/fname"):
print i.text
输出:
BBBB
AAAA
答案 2 :(得分:0)
findall
不起作用,但确实如此:
e = xml.etree.ElementTree.parse(myfile3).getroot()
mylist=list(e.iter('checksum'))
print (len(mylist))
mylist将具有适当的长度。