xml - 如何在 Python 中使用 ElementTree 解析来自同一标签的值?
问题描述
我正在使用 python 来解析 XML 文件,但我遇到了问题。我以字典的形式获取值,但如果有两个或多个相同的值,那么它们就不会重复。我确定有办法解决它,但我是 python 和解析 XML 的新手......
下面是一个 XML 示例:
<Root>
<Child1>
</Child1>
<Child2>
<Data DId = "1">
<Group ID = "">
<Sport Name="Cricket" Team="6" />
<Sport Name="Football" Team="6" />
<Sport Name="Hockey" Team="5" />
</Group>
</Data>
<Data DId = "2">
<Group ID = "">
<Sport Name="Rugby" Team="6" />
<Sport Name="Baseball" Team="10" />
<Sport Name="Swimming" Team="6" />
</Group>
</Data>
</Child2>
</Root>
我想获取由 Data 分隔的 Sport 的标签值。我试过的代码是:
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
dict1 = {}
for i in root.iter('Sport'):
dict1[i.attrib['Name']] = [j.text for j in i]
dict1[i.attrib['Team']] = [k.text for k in i]
print(dict1)
但我无法获得每项运动的团队价值。
解决方案
试试这个库。
from simplified_scrapy import SimplifiedDoc, utils
xml = '''
<Root>
<Child1>
</Child1>
<Child2>
<Data DId = "1">
<Group ID = "">
<Sport Name="Cricket" Team="6" />
<Sport Name="Football" Team="6" />
<Sport Name="Hockey" Team="5" />
</Group>
</Data>
<Data DId = "2">
<Group ID = "">
<Sport Name="Rugby" Team="6" />
<Sport Name="Baseball" Team="10" />
<Sport Name="Swimming" Team="6" />
</Group>
</Data>
</Child2>
</Root>
'''
# xml = utils.getFileContent('test.xml')
dict1 = {}
doc = SimplifiedDoc(xml)
datas = doc.selects('Data')
for i in datas:
dic = {}
for j in i.selects('Sport'):
dic[j['Name']] = j['Team']
dict1[i['DId']] = dic
print(dict1)
结果:
{'1': {'Cricket': '6', 'Football': '6', 'Hockey': '5'}, '2': {'Rugby': '6', 'Baseball': '10', 'Swimming': '6'}}
推荐阅读
- java - 关于生产中的 SSL 证书。为什么我的请求不起作用?
- python - 如何在 Pandas 中使用 quotechar 从 DAT 文件中读取和写入 thorn 字符?
- javascript - AngularJS:从范围初始化指令控制器中的局部变量
- windows - 带有 Windows 工作节点的 HPA - EKS 1.11
- sql - 如何聚合数据以计算 SQL 中的百分位数?
- java - Android Studio - 在不更改当前布局的情况下使活动可滚动?
- scala - 使用火花流解析事件中心消息
- oracle - Corda 上 Oracle 数据库的 JDBC 驱动程序名称是什么?
- python - 如何使用 numpy 进行原子添加
- azure-logic-apps - 如何将字符串与triggerbody连接起来?