xml - 基于同一级别的另一个子元素文本提取子元素中的文本
问题描述
我是 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>
. 我想知道是否有任何建议的方法来提取像字典一样的文本?谢谢!
解决方案
如果您只是想将包装器中包含的每个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 '}]
推荐阅读
- objective-c - 在objective-c中从api获得响应后如何显示警报控制器?
- angular - Angular2测试Html
- ruby-on-rails - 如何在 Rails 中将 Redis 配置为缓存?
- telegram - 将带有电报机器人的共享按钮发送到频道
- php - 在 Symfony 4 中创建包含语言环境的 URL
- ios - 时间戳中的日期错误
- ios - TableView 不显示数据?
- angular - 输入手机号码时如何设置默认国家标志
- javascript - 如何在html中的按钮中显示下拉选择?
- java - Android Date Picker Fragment 不能设置为自定义日期