0
Я пытаюсь прочитать XML-запрос SOAP из журналов и выполнить некоторую проверку, извлекая данные, но без успеха.Извлечение данных из XML с использованием Python с использованием пространства имен
Вот XML я пытаюсь читать:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<createOrder xmlns="http://services.xxx.xxx.xxx.com">
<createOrderRequest>
<ns1:order xmlns:ns1="http://beans.xxx.xxx.xxx.com/xsd">
<ns1:customer>
<ns1:billingAddress>
<ns1:addressLine1>my home address</ns1:addressLine1>
<ns1:addressLine2></ns1:addressLine2>
<ns1:addressType>B</ns1:addressType>
<ns1:city>cityofmine</ns1:city>
<ns1:countryCode>countrycode</ns1:countryCode>
<ns1:firstName>Jo</ns1:firstName>
<ns1:lastName>Sm</ns1:lastName>
<ns1:state>IL</ns1:state>
<ns1:zipCode>60135</ns1:zipCode>
</ns1:billingAddress>
<ns1:customerReferenceId>[email protected]</ns1:customerReferenceId>
</ns1:customer>
<ns1:items>
<ns1:addressKey>99999</ns1:addressKey>
<ns1:orderItemId>xxxxx1231</ns1:orderItemId>
</ns1:items>
</ns1:order>
</createOrderRequest>
</createOrder>
</soapenv:Body>
</soapenv:Envelope>
Вот код, который я пытался с, но я не могу найти элементы.
import xml.etree.ElementTree as ET
def read_create_order():
tree = ET.parse('create_ord.xml')
root = tree.getroot()
print(root.tag)
name_space = {'ns1':'http://beans.xxx.xxx.xxx.com/xsd'}
for item in tree.findall('items', namespaces=name_space):
print(item)
for item in root.findall('items', namespaces=name_space):
print(item)
* "Я хотел бы для доступа к тегу по имени, так что мне не нужно зацикливать «*, к какому конкретному тегу вы пытаетесь получить доступ? – mzjn
@mzjn Я могу получить доступ к определенному полю таким образом прямо сейчас 'ldoc.xpath ('.// ns1: order/ns1: customer')'. Но я точно имел в виду это ... в примере кода выше 'для sub_elements в ldoc.xpath ('.// ns1: order/ns1: customer/ns1: billingAddress'):' однажды я в родительском 'billingAddress', Я хочу знать, могу ли я сделать что-то вроде '.get ('ns1addressLine2')' – VBJ