【问题标题】:How to parse value from same tag using ElementTree in Python?如何在 Python 中使用 ElementTree 解析来自同一标签的值?
【发布时间】:2020-09-25 03:48:24
【问题描述】:

我正在使用 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)

但我无法获得每项运动的团队价值。

【问题讨论】:

    标签: xml parsing python-3.6


    【解决方案1】:

    试试这个库。

    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'}}
    

    【讨论】:

    • 谢谢,@the_train 有没有办法让这些值由“Did”值分隔,就像我想获取每个“Group”标签中存在的标签计数一样?
    • @ArenMayank 我改变了答案。你认为这是你想要的吗?
    • 完美,感谢@the_train 的建议。
    猜你喜欢
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多