【发布时间】:2014-10-14 20:52:35
【问题描述】:
鉴于下面的简单 XML 数据:
<book>
<title>My First Book</title>
<abstract>
<para>First paragraph of the abstract</para>
<para>Second paragraph of the abstract</para>
</abstract>
<keywordSet>
<keyword>First keyword</keyword>
<keyword>Second keyword</keyword>
<keyword>Third keyword</keyword>
</keywordSet>
</book>
如何使用lxml 遍历树,并获取“abstract”元素中的所有段落以及“keywordSet”元素中的所有关键字?
下面的代码 sn-p 只返回每个元素中的第一行文本:
from lxml import objectify
root = objectify.fromstring(xml_string) # xml_string contains the XML data above
print root.title # returns the book title
for line in root.abstract:
print line.para # returns only yhe first paragraph
for word in root.keywordSet:
print word.keyword # returns only the first keyword in the set
我尝试关注this example,但上面的代码没有按预期工作。
如果采用不同的策略,最好能够将整个 XML 树读入 Python 字典,其中每个元素作为键,每个文本作为元素项。我发现使用 lxml objectify 可能会实现这样的事情,但我不知道如何实现它。
我在尝试用 Python 编写 XML 解析代码时发现的一个非常大的问题是,提供的大多数“示例”都过于简单且完全是虚构的,无法提供太多帮助——否则它们正好相反,使用过于复杂的自动生成的 XML 数据!
谁能给我一个提示?
提前致谢!
编辑:发布此问题后,我找到了一个简单的解决方案here。
所以,我更新后的代码变成了:
from lxml import objectify
root = objectify.fromstring(xml_string) # xml_string contains the XML data above
print root.title # returns the book title
for para in root.abstract.iterchildren():
print para # now returns the text of all paragraphs
for keyword in root.keywordSet.iterchildren():
print keyword # now returns all keywords in the set
【问题讨论】:
-
确实,下面的@LukasGraf 答案也提供了同样的解决方案,但是以更 Python 的方式! :-)