我在这里看到了很多关于 lxml 解析的问题,虽然它们都非常有用,但有些问题是特定于被解析文件的结构的。
就我而言,我有一个如下所示的 xml:
<documents>
<document>
<id>123456</id>
<element name="name">
<value><![CDATA[john doe]]></value>
</element>
<element name="address">
<value><![CDATA[no name street]]></value>
</element>
</document>
</documents>
实际的 xml 有更多的元素,但这只是为了举例说明。我的最终目的是将其中一些信息提取到 csv 中,以便得到以下结果:
id, name, address
123456,john doe,no name street
但是我的问题是解析文件以根据条件(如果父“元素”具有特定属性)获取“值”元素中的值。
因为我要解析的真实文件大约是 8gb,所以我认为最好使用 lxml 的 iterparse 来避免在内存中存储一棵大树。
这是我现在拥有的代码,如果“元素”的属性“名称”等于列表“属性”中指定的值,我在尝试检查下一个元素的文本时有点卡在最后:
from lxml import etree
attributes = ("name", "address")
context = etree.iterparse("test.xml", tag="document")
for event, element in context:
for child in element:
if child.attrib.get("name") in attributes:
print child.getnext().text
谢谢你的帮助!