Voglio utilizzare il metodo di "findall" per individuare alcuni elementi del file xml di origine in il modulo ElementTree.Modulo Python ElementTree: come ignorare lo spazio dei nomi dei file XML per individuare l'elemento corrispondente quando si utilizza il metodo "trova", "findall"
Tuttavia, il file xml di origine (test.xml) ha spazio dei nomi. I Tronca parte del file XML come campione:
<?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>
L'esempio di codice Python è qui sotto:
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>
Anche se può funzionare, perché non v'è uno spazio dei nomi "{http: //www.test. com} ", è molto sconveniente aggiungere uno spazio dei nomi davanti a ogni tag.
Come posso ignorare lo spazio dei nomi quando si utilizza il metodo di "trova", "findall" e così via?
Is 'tree.findall (" xmlns: DEAL_LEVEL/xmlns: PAID_OFF ", namespaces = {'xmlns': 'http://www.test.com'})' abbastanza conveniente? – iMom0
Grazie mille. Provo il tuo metodo e può funzionare. È più comodo del mio ma è ancora un po 'imbarazzante.Sai se non esiste un altro metodo corretto nel modulo ElementTree per risolvere questo problema o non esiste un metodo del genere? – KevinLeng