我实际上写了一个库,它完全按照你想象的方式做事。该库称为“xe”,您可以从以下位置获取它:http://home.avvanta.com/~steveha/xe.html
xe 可以导入 XML,让您以面向对象的方式处理数据。它实际上使用 xml.dom.minidom 进行解析,但随后它遍历生成的树并将数据打包到 xe 对象中。
编辑:好的,我继续在 xe 中实现了你的例子,所以你可以看到它是如何工作的。以下是实现您展示的 XML 的类:
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()
这是使用上述内容的示例。我将您的示例 XML 放入一个名为“example.xml”的文件中,但您也可以将其放入一个字符串中并传递该字符串。
>>> 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
>>>
请注意,在此示例中,“值”的类型将是字符串。如果你真的需要另一种类型的属性,也可以通过一些工作来实现,但我没有为这个例子费心。(如果您查看 PyFeed,有一个 OPML 类,其属性不是文本。)