根据同一级别的另一个子元素文本提取子元素中的文本

时间:2019-09-11 00:28:03

标签: xml python-3.x elementtree

我是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>中的任何内容}。我想知道是否有建议的方法来提取字典等文本?谢谢!

1 个答案:

答案 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 '}]