De hecho, escribí una biblioteca que hace las cosas exactamente de la manera en que lo imaginaste. La biblioteca se llama "xe" y puede obtenerla de: http://home.avvanta.com/~steveha/xe.html
xe puede importar XML para permitirle trabajar con los datos de forma orientada a objetos. En realidad usa xml.dom.minidom para hacer el análisis sintáctico, pero luego camina sobre el árbol resultante y empaqueta los datos en objetos xe.
EDITAR: Bien, seguí adelante e implementé su ejemplo en xe, para que pueda ver cómo funciona. Aquí hay clases para implementar el XML que mostró:
import xe
class Node(xe.TextElement):
def __init__(self, text="", value=None):
xe.TextElement.__init__(self, "node", text)
if value is not None:
self.attrs["value"] = value
class Root(xe.NestElement):
def __init__(self):
xe.NestElement.__init__(self, "root")
self.node = Node()
Y aquí hay un ejemplo del uso de lo anterior. Puse su XML de muestra en un archivo llamado "example.xml", pero también podría ponerlo en una cadena y pasar la cadena.
>>> root = Root()
>>> print root
<root/>
>>> root.import_xml("example.xml")
<Root object at 0xb7e0c52c>
>>> print root
<root>
<node value="30">text</node>
</root>
>>> print root.node.attrs["value"]
30
>>>
Tenga en cuenta que en este ejemplo, el tipo de "valor" será una cadena. Si realmente necesita atributos de otro tipo, eso también es posible con un poco de trabajo, pero no me molesté en este ejemplo. (Si miras a PyFeed, hay una clase para OPML que tiene un atributo que no es texto.)
¿XPath cuenta como fácil de usar? http://stackoverflow.com/questions/8692/how-to-use-xpath-in-python – Welbog
¡Estaría muy interesado en una versión de Java de esto! – Federer