Не могу найти узел в XML ( etree find ). Как правильно описать вызов find?

Есть xml файл

<ns:Documents
  xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
  xmlns:wb="http://fsrar.ru/WEGAIS/TTNSingle_v4">
  <ns:Document>
    <ns:WayBill_v4>
      <wb:Header>
        <wb:Shipper>
        </wb:Shipper>
        <wb:Consignee>
        </wb:Consignee>
      </wb:Header>
    </ns:WayBill_v4>
  </ns:Document>
</ns:Documents>

Мне требуется найти узел грузополучателя или Consignee

Написал вот такой код

import xml.etree.cElementTree as et
tree = et.parse( "WayBill.xml" )
root = tree.getroot()
wb_Consignee = root.find( 'wb:Consignee' )
print( wb_Consignee )                          # None
Consignee = root.find( 'Consignee' )
print( Consignee )                             # None

Подскажите, что не так ?


Ответы (2 шт):

Автор решения: alex

@splash58 подсказал, куда копать. Спасибо ему. 2 - 3 часа обучения и всё взошло

Вот результат

from lxml import etree
tree = etree.parse( "WayBill.xml" )
root = tree.getroot() # Documents
ns = root.nsmap
doc = root.find( "ns:Document", ns ) 
wb = doc.find( "ns:WayBill_v4", ns ) 
head = wb.find( "wb:Header", ns ) 
consignee = head.find( "wb:Consignee", ns ) 

print( consignee )
→ Ссылка
Автор решения: alex

Более короткая версия, с использованием XPath

from lxml import etree
tree = etree.parse( "WayBill.xml" )
root = tree.getroot() # Documents
ns = root.nsmap
consignee = root.find( './/wb:Consignee', ns )

#  .// означает поиск по всему документу, а не только по детям 

print( consignee )
→ Ссылка