In realtà ho scritto una libreria che fa esattamente le cose come la immaginavi. La libreria si chiama "xe" e puoi scaricarla da: http://home.avvanta.com/~steveha/xe.html
xe può importare XML per farti lavorare con i dati in modo orientato agli oggetti. In realtà usa xml.dom.minidom per fare il parsing, ma poi cammina sull'albero risultante e impacchetta i dati in oggetti xe.
EDIT: Ok, sono andato avanti e ho implementato il tuo esempio in xe, così puoi vedere come funziona. Ecco le classi per implementare l'XML che hai mostrato:
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()
Ed ecco un esempio di utilizzo di quanto sopra. Ho inserito il tuo XML di esempio in un file chiamato "example.xml", ma potresti anche metterlo in una stringa e passare la stringa.
>>> 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
>>>
Si noti che in questo esempio, il tipo di "valore" sarà una stringa. Se hai davvero bisogno di attributi di un altro tipo, è possibile anche con un po 'di lavoro, ma non mi sono preoccupato di questo esempio. (Se guardi PyFeed, c'è una classe per OPML che ha un attributo che non è testo.)
XPath conta come facile da usare? http://stackoverflow.com/questions/8692/how-to-use-xpath-in-python – Welbog
Sarei molto interessato a una versione Java di questo! – Federer