Si tengo un archivo xml como este:
something something something
Puedo usar xmlTree.getroot().findall("item")
para obtener todos los elementos ‘item’.
¿Cómo obtendría todos los elementos del ‘elemento’ O ‘prueba’? Quiero algo como:
xmlTree.getroot().findall("item or test")
No vi nada como esto en los ejemplos de la documentación. ¿Algunas ideas?
Dado que ElementTree de stdlib solo proporciona soporte limitado para xpath , puede usar |
operador xpath O solo si está utilizando lxml
:
from lxml import etree as ET data = """ - 1
2 """ tree = ET.fromstring(data) for element in tree.xpath('//item|//test'): print element.text
huellas dactilares:
1 2
En el caso de xml.etree.ElementTree
puede combinar los resultados de dos llamadas findall()
separadas:
for element in tree.findall('.//item') + tree.findall('.//test'): print element.text
O, compruebe el nombre de la etiqueta dentro del bucle:
for element in tree.iter(): if element.tag in ('item', 'test'): print element.text
Aquí hay una solución donde no necesita especificar “A | B | …”. En su lugar, use “*” como comodín y filtre las partes no deseadas por el índice como se muestra a continuación en el código (por ejemplo, en esta pregunta, la última etiqueta “test2” se puede excluir usando lst [: – 1]).
import xml.etree.ElementTree as ET data=''' -
something1 something2 something3 ''' root = ET.fromstring(data) lst = root.findall('*') for x in lst[:-1]: print(x.find('prop').text)
SALIDA:
algo1
algo2