Python 3.x 使用Python从XML字符串提取数据

Python 3.x 使用Python从XML字符串提取数据,python-3.x,xml,Python 3.x,Xml,我有一个XML字符串,只需要提取每组“行”中的第一个“col”标记。 换句话说,输出应如下所示: Fluk-TEST Beltran-TEST ACME-TEST 这是XML: data = '''<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/&qu

我有一个XML字符串,只需要提取每组“行”中的第一个“col”标记。 换句话说,输出应如下所示:

Fluk-TEST
Beltran-TEST
ACME-TEST
这是XML:

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>
这是我的代码的输出:

Fluk-TEST
ATP 1
true
None
Beltran-TEST
ATP 2
true
None
ACME-TEST
ATP 3
true
None

请帮我一下。非常感谢

您可以使用切片操作符。它最多占用列表类对象中的一个元素:

for row in root.iter('row'):
    for col in row[:1]:
        print(col.text)

还有这个高级SOAP库,但在这种情况下可能有点过头了

只需迭代感兴趣的节点:
对于root.iterfind('.//row/col[1]”)中的col:
非常感谢@kobuz,您的答案非常有用非常感谢@Tomalak,您的答案非常有用
for row in root.iter('row'):
    for col in row[:1]:
        print(col.text)