我正在解析Web服务提供的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>
...
我想获取每个Value参数取决于Pt S04参数。我能够获取每个Value参数,每个Pt都分开,但是我需要每个Pt = 0,Pt = 1 ...
的值。我尝试了下一个,但是我不得不采取很多措施,与现实不符。那是因为,每个Value部分而不是正确值的循环访问
...
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)
答案 0 :(得分:0)
您最内在的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)
答案 1 :(得分:0)
您需要迭代parse
中的for intento in tree.iter('Value'):
对象而不是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