我是XML的新手,很长一段时间以来我一直在思考这个问题...我想从元素中提取文本内容,该元素基于另一个元素中具有相同名称,处于相同级别的另一个元素中的另一个文本内容。带有python的xml文件:
这是xml的样子:
<element2>
<source> content1 </source>
<ref> content2 </ref>
</element2>
<element2>
<source> content3 </source>
<ref> content4 </ref>
</element2>
<element2>
....
</element2>
.
.
.
我想基于文本“ content1”提取文本“ content2”。但是,如果使用iter()或child.tag,则无法精确定位要提取的文本。甚至child.find(content2)也不起作用,因为存在多个“ element2”,并且它仅提取找到的第一个element2,但是我有兴趣根据{{1}中的文本内容提取<ref>
中的任何内容}。我想知道是否有建议的方法来提取字典等文本?谢谢!
答案 0 :(得分:1)
如果您只想将source
包装器中包含的每个ref
/ element2
对值提取到词典列表中,则可以使用
import xml.etree.ElementTree as ET
xml = '''<root>
<element2>
<source> content1 </source>
<ref> content2 </ref>
</element2>
<element2>
<source> content3 </source>
<ref> content4 </ref>
</element2>
</root>'''
root = ET.fromstring(xml)
result = [ { 'source' : element2.find('source').text, 'ref' : element2.find('ref').text } for element2 in root.findall('.//element2')]
print(result)
这样,您将获得
之类的结果[{'source': ' content1 ', 'ref': ' content2 '}, {'source': ' content3 ', 'ref': ' content4 '}]