Voglio usare il metodo di "findall" per individuare alcuni elementi del file XML di origine nel modulo ElementTree.
Tuttavia, il file XML di origine (test.xml) ha spazio dei nomi. Troncare parte del file XML come esempio:
<?xml version="1.0" encoding="iso-8859-1"?>
<XML_HEADER xmlns="http://www.test.com">
<TYPE>Updates</TYPE>
<DATE>9/26/2012 10:30:34 AM</DATE>
<COPYRIGHT_NOTICE>All Rights Reserved.</COPYRIGHT_NOTICE>
<LICENSE>newlicense.htm</LICENSE>
<DEAL_LEVEL>
<PAID_OFF>N</PAID_OFF>
</DEAL_LEVEL>
</XML_HEADER>
Il codice di esempio di Python è di seguito:
from xml.etree import ElementTree as ET
tree = ET.parse(r"test.xml")
el1 = tree.findall("DEAL_LEVEL/PAID_OFF") # Return None
el2 = tree.findall("{http://www.test.com}DEAL_LEVEL/{http://www.test.com}PAID_OFF") # Return <Element '{http://www.test.com}DEAL_LEVEL/PAID_OFF' at 0xb78b90>
Sebbene possa funzionare, poiché esiste uno spazio dei nomi "{http://www.test.com}", è molto scomodo aggiungere uno spazio dei nomi davanti a ciascun tag.
Come posso ignorare lo spazio dei nomi quando uso il metodo di "trova", "trova tutto" e così via?
tree.findall("{0}DEAL_LEVEL/{0}PAID_OFF".format('{http://www.test.com}'))
tree.findall("xmlns:DEAL_LEVEL/xmlns:PAID_OFF", namespaces={'xmlns': 'http://www.test.com'})
abbastanza conveniente?