Extraer datos de un string XML con Python
Publicado por Mariano (4 intervenciones) el 25/02/2021 14:20:27
Tengo un string XML y necesito extraer solamente la primer etiqueta "col" en cada grupo de "row". Es decir la salida debería ser la siguiente:
Este es el XML:
El siguiente es mi codigo, pero extrae todas las etiquetas "col" en lugar de solo la primera de cada grupo como yo quisiera:
Esta es la salida de mi codigo:
Por favor si me pueden hechar una mano. muchas gracias
1
2
3
Fluk-TEST
Beltran-TEST
ACME-TEST
Este es el XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
data = '''<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<processOXIMessageResponse xmlns="urn:com:singun:webservice" xmlns:ns="urn:com:singun:webservice">
<ns1:processOXIMessageReturn xmlns:ns1="urn:com:singun:webservice">
<SingunDocument xmlns="C" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" protocol="OXI">
<sessionId xmlns="">1613762599483</sessionId>
<command xmlns="" echo="" xsi:type="ServiceProviderGetListResponse">
<serviceProviderTable>
<colHeading>Service Provider Id</colHeading>
<colHeading>Service Provider Name</colHeading>
<colHeading>Is Enterprise</colHeading>
<colHeading>Reseller Id</colHeading>
<row>
<col>Fluk-TEST</col>
<col>ATP 1</col>
<col>true</col>
<col />
</row>
<row>
<col>Beltran-TEST</col>
<col>ATP 2</col>
<col>true</col>
<col />
</row>
<row>
<col>ACME-TEST</col>
<col>ATP 3</col>
<col>true</col>
<col />
</row>
</serviceProviderTable>
</command>
</SingunDocument>
</ns1:processOXIMessageReturn>
</processOXIMessageResponse>
</soapenv:Body>
</soapenv:Envelope>
El siguiente es mi codigo, pero extrae todas las etiquetas "col" en lugar de solo la primera de cada grupo como yo quisiera:
1
2
3
4
5
6
import xml.etree.ElementTree as ET
root = ET.fromstring(data)
for row in root.iter('row'):
for col in row:
print(col.text)
Esta es la salida de mi codigo:
1
2
3
4
5
6
7
8
9
10
11
12
Fluk-TEST
ATP 1
true
None
Beltran-TEST
ATP 2
true
None
ACME-TEST
ATP 3
true
None
Por favor si me pueden hechar una mano. muchas gracias
Valora esta pregunta


0