首页 > 解决方案 > 基于同一级别的另一个子元素文本提取子元素中的文本

问题描述

我是 XML 新手,我一直在思考这个问题......我想从元素中提取文本内容,该文本内容基于另一个元素中的另一个文本内容,该元素中具有相同名称的 xml 文件中的同一级别Python:

这是 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,但我有兴趣<ref>根据<source>. 我想知道是否有任何建议的方法来提取像字典一样的文本?谢谢!

标签: xmlpython-3.xelementtree

解决方案


如果您只是想将包装器中包含的每个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 '}]

推荐阅读