【问题标题】:Python class objects and XMLPython 类对象和 XML
【发布时间】:2012-10-05 14:49:08
【问题描述】:

是否可以根据 XML 文件的分层内容自动生成 python 类对象?
让我解释一下我的意思。假设我有一个 XML 文件,其中包含(为简单起见)以下内容:

<breakfast_menu>
   <food>
     <name>Belgian Waffles</name>
     <price>$5.95</price>
     <description>blah blah...etc...</description>
     <calories>650</calories>
   </food>
</breakfast_menu>

我喜欢 XML 呈现数据和属性的方式,但我想使用 Python,所以我想问是否有一组实用程序可以读取上面的文件并创建如下内容:

class breakfast_menu():
   food = food(self, name="Belgian Waffles", price="$5.95", description="blah blah...etc...", calories=650)

这可行吗?谁能建议一种方法/工具来做到这一点? 预先感谢您的考虑。

【问题讨论】:

  • 您可以在 Python 中在运行时向类添加属性,所以这应该是可能的。但是,我不知道有什么工具可以为您做到这一点。
  • stackoverflow.com/questions/1072853/… 的可能副本。我意识到您在这里没有使用模式,但为了生成正确的表示,没有一个 imo 将很难做到。
  • fwiw,我相信有一些工具可以为您“学习”模式,并提供培训文档列表。所以,如果这就是你所拥有的,你可能想从那里开始。
  • 也许如果您给我们一个您尝试这样做的原因,我们可以找到一个更简单的解决方案。
  • 抱歉,我不是这里的专家。让我试着解释一下:我相信 XML 是一种以分层方式组织数据的好方法。最重要的是,我正在处理已经使用了一段时间的现有 XML 文件。这些包含值和属性。用户已经有工具可以轻松地操作/查看以 XML 格式存储的数据。但是,如果我可以创建等效的 python 类对象,那么我可以使用像 Python 这样的面向对象语言的功能来(例如)创建对象实例,允许类派生/组合等......

标签: python xml object xml-parsing lxml


【解决方案1】:

使用一些 XML 解析器(例如 ElementTree)对其进行解析。将每个食物标签中的内容获取到 Python 字典中。 将字典提供给这样的函数时解包:

food(**my_dictionary)

如果字典包含类似my_dictionary = {'name':'Belgian Waffles', 'price':'$5.95'} 的内容,则调用food(**my_dictionary) 将与调用food(name = 'Belgian Waffles', price = '$5.95') 相同。欲了解更多信息,请查看Understanding kwargs in Python

【讨论】:

  • +1 如果不需要继承,使用 dict 比使用类更简单。
  • 这是如何处理 XML 属性的?例如:&lt;person name='John'/&gt;
【解决方案2】:

听起来您需要 ElementTree XML API 之类的东西:http://docs.python.org/library/xml.etree.elementtree.html

【讨论】:

  • 看起来使用 etree 可以读取/解析/修改/创建/删除 XML 节点,但是是否可以将(松散)对应的 python 类对象写成 .py 文件为我在我的例子中提供了?
  • 您能否举一个简单的例子,并附上一些代码并解释您想要实现的目标?
  • 我想根据任意 XML 文件的内容自动生成 python 类,维护 XML 表示的层次结构。
猜你喜欢
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
相关资源
最近更新 更多