如果有重复的名称,我可以 select 只有一个子元素吗?
Can I select only one subelement if there are repetitive names?
我正在解析由网络服务提供的 XML,我正在尝试获取 somo 信息:这是来自智能电表的报告。接下来是XML的一部分:
<Report IdRpt="S04" IdPet="0" Version="3.1">
<Cnc Id="CUR9737960375">
<Cnt Id="LGZ0019800498">
<S04 Fhi="20190401000000000W" Fhf="20190501000000000S" Ctr="1" Pt="0" Mx="157 W" Fx="20190430200000000S">
<Value AIi="2632 Wh" AEi="0 Wh" R1i="0 varh" R2i="0 varh" R3i="7094 varh" R4i="884 varh"/>
<Value AIa="20461 Wh" AEa="0 Wh" R1a="0 varh" R2a="0 varh" R3a="147960 varh" R4a="8044 varh"/>
</S04>
<S04 Fhi="20190401000000000W" Fhf="20190501000000000S" Ctr="1" Pt="1" Mx="157 W" Fx="20190430200000000S">
<Value AIi="2632 Wh" AEi="0 Wh" R1i="0 varh" R2i="0 varh" R3i="2650 varh" R4i="885 varh"/>
<Value AIa="15218 Wh" AEa="0 Wh" R1a="0 varh" R2a="0 varh" R3a="59520 varh" R4a="6145 varh"/>
</S04>
...
我想获取每个值参数依赖于 Pt S04 参数。我能够获取每个值参数并且每个 Pt 分开,但我需要 Pt=0、Pt=1 的每个值...
下一个我试过了,但是我的措施太多了,与实际情况不符。那是因为,每个值部分的循环访问而不是正确的值
...
S02_list = ['AIi','AEi','R1i','R2i','R3i', 'R4i']
for medida in S02_list:
for parse in tree.iter('S04'):
Pt = parse.get('Pt')
for intento in tree.iter('Value'):
z = str(intento.get(medida))
if z != 'None':
print ('El valor de '+medida+' para Pt= '+Pt+' es: '+z)
您最内层的 for 循环正在遍历树中的所有 Value 元素,而不仅仅是您当前正在遍历的 S04 的子元素。试试这个:
for intento in parse.iter('Value'):
如果打印顺序不重要,您还可以更改循环顺序以仅扫描一次树:
for parse in tree.iter('S04'):
Pt = parse.get('Pt')
for intento in parse.iter('Value'):
for medida in S02_list:
z = str(intento.get(medida))
if z != 'None':
print ('El valor de '+medida+' para Pt= '+Pt+' es: '+z)
您需要迭代 for intento in tree.iter('Value'):
中的 parse
对象,而不是 tree
,因此这将更改为 for intento in parse.iter('Value'):
,然后您的代码将更改为
S02_list = ['AIi','AEi','R1i','R2i','R3i', 'R4i']
for medida in S02_list:
for parse in root.iter('S04'):
Pt = parse.get('Pt')
#Iterate on parse
for intento in parse.iter('Value'):
z = str(intento.get(medida))
if z != 'None':
print('El valor de ' + medida + ' para Pt= ' + Pt + ' es: ' + z)
输出看起来像
El valor de AIi para Pt= 0 es: 2632 Wh
El valor de AIi para Pt= 1 es: 2632 Wh
El valor de AEi para Pt= 0 es: 0 Wh
El valor de AEi para Pt= 1 es: 0 Wh
El valor de R1i para Pt= 0 es: 0 varh
El valor de R1i para Pt= 1 es: 0 varh
El valor de R2i para Pt= 0 es: 0 varh
El valor de R2i para Pt= 1 es: 0 varh
El valor de R3i para Pt= 0 es: 7094 varh
El valor de R3i para Pt= 1 es: 2650 varh
El valor de R4i para Pt= 0 es: 884 varh
El valor de R4i para Pt= 1 es: 885 varh
我正在解析由网络服务提供的 XML,我正在尝试获取 somo 信息:这是来自智能电表的报告。接下来是XML的一部分:
<Report IdRpt="S04" IdPet="0" Version="3.1">
<Cnc Id="CUR9737960375">
<Cnt Id="LGZ0019800498">
<S04 Fhi="20190401000000000W" Fhf="20190501000000000S" Ctr="1" Pt="0" Mx="157 W" Fx="20190430200000000S">
<Value AIi="2632 Wh" AEi="0 Wh" R1i="0 varh" R2i="0 varh" R3i="7094 varh" R4i="884 varh"/>
<Value AIa="20461 Wh" AEa="0 Wh" R1a="0 varh" R2a="0 varh" R3a="147960 varh" R4a="8044 varh"/>
</S04>
<S04 Fhi="20190401000000000W" Fhf="20190501000000000S" Ctr="1" Pt="1" Mx="157 W" Fx="20190430200000000S">
<Value AIi="2632 Wh" AEi="0 Wh" R1i="0 varh" R2i="0 varh" R3i="2650 varh" R4i="885 varh"/>
<Value AIa="15218 Wh" AEa="0 Wh" R1a="0 varh" R2a="0 varh" R3a="59520 varh" R4a="6145 varh"/>
</S04>
...
我想获取每个值参数依赖于 Pt S04 参数。我能够获取每个值参数并且每个 Pt 分开,但我需要 Pt=0、Pt=1 的每个值...
下一个我试过了,但是我的措施太多了,与实际情况不符。那是因为,每个值部分的循环访问而不是正确的值
...
S02_list = ['AIi','AEi','R1i','R2i','R3i', 'R4i']
for medida in S02_list:
for parse in tree.iter('S04'):
Pt = parse.get('Pt')
for intento in tree.iter('Value'):
z = str(intento.get(medida))
if z != 'None':
print ('El valor de '+medida+' para Pt= '+Pt+' es: '+z)
您最内层的 for 循环正在遍历树中的所有 Value 元素,而不仅仅是您当前正在遍历的 S04 的子元素。试试这个:
for intento in parse.iter('Value'):
如果打印顺序不重要,您还可以更改循环顺序以仅扫描一次树:
for parse in tree.iter('S04'):
Pt = parse.get('Pt')
for intento in parse.iter('Value'):
for medida in S02_list:
z = str(intento.get(medida))
if z != 'None':
print ('El valor de '+medida+' para Pt= '+Pt+' es: '+z)
您需要迭代 for intento in tree.iter('Value'):
中的 parse
对象,而不是 tree
,因此这将更改为 for intento in parse.iter('Value'):
,然后您的代码将更改为
S02_list = ['AIi','AEi','R1i','R2i','R3i', 'R4i']
for medida in S02_list:
for parse in root.iter('S04'):
Pt = parse.get('Pt')
#Iterate on parse
for intento in parse.iter('Value'):
z = str(intento.get(medida))
if z != 'None':
print('El valor de ' + medida + ' para Pt= ' + Pt + ' es: ' + z)
输出看起来像
El valor de AIi para Pt= 0 es: 2632 Wh
El valor de AIi para Pt= 1 es: 2632 Wh
El valor de AEi para Pt= 0 es: 0 Wh
El valor de AEi para Pt= 1 es: 0 Wh
El valor de R1i para Pt= 0 es: 0 varh
El valor de R1i para Pt= 1 es: 0 varh
El valor de R2i para Pt= 0 es: 0 varh
El valor de R2i para Pt= 1 es: 0 varh
El valor de R3i para Pt= 0 es: 7094 varh
El valor de R3i para Pt= 1 es: 2650 varh
El valor de R4i para Pt= 0 es: 884 varh
El valor de R4i para Pt= 1 es: 885 varh