Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何在Python中使用ElementTree解析来自同一标记的值?_Xml_Parsing_Python 3.6 - Fatal编程技术网

Xml 如何在Python中使用ElementTree解析来自同一标记的值?

Xml 如何在Python中使用ElementTree解析来自同一标记的值?,xml,parsing,python-3.6,Xml,Parsing,Python 3.6,我正在使用python解析XML文件,但我遇到了一个问题。我得到的是字典形式的值,但是如果有两个或更多相同的值,那么它们就不会重复。我肯定有办法解决这个问题,但我对python和解析XML还不太熟悉 以下是XML的一个示例: <Root> <Child1> </Child1> <Child2> <Data DId = "1"> <Group ID = "">

我正在使用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>
但我无法获得每项运动的团队价值。

试试这个库

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)

谢谢,@u train有没有办法将这些值用“Did”值分开,就像我想得到每个“Group”标记中存在的标记计数一样?@ArenMayank我更改了答案。你认为这是你想要的吗?太好了,谢谢你的建议。
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'}}