Extraer texto de XML usando python

Tengo este ejemplo de archivo XML

 Chapter 1 Welcome to Chapter 1   Chapter 2 Welcome to Chapter 2  

Me gusta extraer el contenido de las tags de título y las tags de contenido.

Qué método es bueno para extraer los datos, mediante la coincidencia de patrones o el módulo xml. O hay alguna forma mejor de extraer los datos.

Ya existe una biblioteca XML incorporada, en particular ElementTree . Por ejemplo:

 >>> from xml.etree import cElementTree as ET >>> xmlstr = """ ...  ...  ... Chapter 1 ... Welcome to Chapter 1 ...  ...  ... Chapter 2 ... Welcome to Chapter 2 ...  ...  ... """ >>> root = ET.fromstring(xmlstr) >>> for page in list(root): ... title = page.find('title').text ... content = page.find('content').text ... print('title: %s; content: %s' % (title, content)) ... title: Chapter 1; content: Welcome to Chapter 1 title: Chapter 2; content: Welcome to Chapter 2 

Personalmente prefiero analizar utilizando xml.dom.minidom así:

 In [18]: import xml.dom.minidom In [19]: x = """\  Chapter 1 Welcome to Chapter 1   Chapter 2 Welcome to Chapter 2 """ In [28]: doc = xml.dom.minidom.parseString(x) In [29]: doc.getElementsByTagName("page") Out[30]: [, ] In [32]: [p.firstChild.wholeText for p in doc.getElementsByTagName("title") if p.firstChild.nodeType == p.TEXT_NODE] Out[33]: [u'Chapter 1', u'Chapter 2'] In [34]: [p.firstChild.wholeText for p in doc.getElementsByTagName("content") if p.firstChild.nodeType == p.TEXT_NODE] Out[35]: [u'Welcome to Chapter 1', u'Welcome to Chapter 2'] In [36]: for node in doc.childNodes: if node.hasChildNodes: for cn in node.childNodes: if cn.hasChildNodes: for cn2 in cn.childNodes: if cn2.nodeType == cn2.TEXT_NODE: print cn2.wholeText Out[37]: Chapter 1 Welcome to Chapter 1 Chapter 2 Welcome to Chapter 2