Python - Extraer datos de un string XML con Python

 
Vista:
sin imagen de perfil
Val: 2
Ha disminuido su posición en 7 puestos en Python (en relación al último mes)
Gráfica de Python

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:
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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jaime
Val: 526
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Extraer datos de un string XML con Python

Publicado por Jaime (136 intervenciones) el 01/03/2021 00:18:59
Puedes usar un if para que devuelva solo la primera. Puedes usar expresiones regulares. La opción que te voy a demostrar es como lo haría yo:

1
2
3
4
5
6
7
8
9
10
11
12
import xml.etree.ElementTree as ET
 
 
firts_column = []
root = ET.fromstring(data)
 
for row in root.iter('row'):
 
    for col in row:
 
        firts_column.append(col.text)
        break

La lista "firts_column" guarda todas primeras columnas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar