Element tree: how to parse subelements of child nodes

I have an XML tree that I would like to parse using Elementtree. My XML looks something like

<?xml version="1.0" encoding="UTF-8"?>
<GetOrdersResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Ack>Success</Ack>
<Version>857</Version>
<Build>E857_INTL_APIXO_16643800_R1</Build>
<PaginationResult>
    <TotalNumberOfPages>1</TotalNumberOfPages>
    <TotalNumberOfEntries>2</TotalNumberOfEntries>
</PaginationResult>
<HasMoreOrders>false</HasMoreOrders>
<OrderArray>
    <Order>
        <OrderID>221362908003-1324471823012</OrderID>
        <CheckoutStatus>
            <eBayPaymentStatus>NoPaymentFailure</eBayPaymentStatus>
            <LastModifiedTime>2014-02-03T12:08:51.000Z</LastModifiedTime>
            <PaymentMethod>PaisaPayEscrow</PaymentMethod>
            <Status>Complete</Status>
            <IntegratedMerchantCreditCardEnabled>false</IntegratedMerchantCreditCardEnabled>
        </CheckoutStatus>
    </Order>
    <Order> ...
    </Order>
    <Order> ...
    </Order>
</OrderArray>
</GetOrdersResponse>

I want to parse the 6th child element of XML (). I can get the value of subitems by index. For example, if I want a first-order OrderID, I can use root[5][0][0].text. But I would like to get the values ​​of subElements by name. I tried the following code but didn't print anything:

tree = ET.parse('response.xml')
root = tree.getroot()
for child in root:
    try:
        for ids in child.find('Order').find('OrderID'):
            print ids.text
    except:
        continue

Can someone please help me on it. Thanks

+4
source share
3 answers

XML (xmlns="urn:ebay:apis:eBLBaseComponents"), . , {urn:ebay:apis:eBLBaseComponents}OrderID OrderID.

OrderID :

from xml.etree import ElementTree as ET

NS = "urn:ebay:apis:eBLBaseComponents"

tree = ET.parse('response.xml')

for elem in tree.iter("*"):    # Use tree.getiterator("*") in Python 2.5 and 2.6
    if elem.tag == '{%s}OrderID' % NS:
        print elem.text

ElementTree . http://effbot.org/zone/element-namespaces.htm.

+3

. find , None.

for child in root:
    order = child.find('Order')
    if order is not None:
        ids = order.find('OrderID')
        print ids.text
+1

OrderArray, :

tree = ET.parse('response.xml')
root = tree.getroot()
order_array = root.find("OrderArray")
for order in order_array.findall('Order'):
    order_id_element = order.find('OrderID')
    if order_id_element is not None:
        print order_id_element.text

. except: continue. , , .

+1

Source: https://habr.com/ru/post/1525078/


All Articles