Python ElementTree – itera a través de nodos secundarios y texto en orden

Estoy usando python el tercero y la API de ElementTree. Tengo algunos xml del formulario:

 Over the  and through the . To Grandmother's  we go.  

Quiero poder iterar a través del texto y los nodos secundarios para un elemento determinado en orden. Entonces, para el primer artículo, la lista que quiero imprimir línea por línea sería:

 Over the  and through the  . 

Pero no puedo averiguar cómo hacer esto con ElementTree. Puedo ordenar el texto a través de itertext() y los elementos secundarios en orden de varias formas, pero no entrelazarlos en orden. Esperaba poder usar una expresión XPath como ./@text|./ref , pero el subconjunto de XPath de ElementTree no parece admitir la selección de atributos. Si pudiera obtener los contenidos XML originales sin procesar de cada nodo de elemento, podría analizarlo si es necesario.

Prueba esto:

 from xml.etree import ElementTree as ET xml = """ Over the  and through the . To Grandmother's  we go. """ root = ET.fromstring(xml) for item in root: if item.text: print(item.text) for ref in item: print(ref) if ref.tail: print(ref.tail) 

La representación de .text de “contenido mixto” se basa en los atributos .text y .tail . El .text de un elemento representa el texto del elemento hasta el primer elemento secundario. El .tail ese niño contiene el texto de su padre que lo sigue. Ver el documento API .