【问题标题】:How to convert XSD to Python Class如何将 XSD 转换为 Python 类
【发布时间】:2009-07-02 06:49:23
【问题描述】:

我只是想知道是否有一个程序可以将 XSD 文件转换为 Python 类,就像 JAXB 为 Java 所做的那样?

【问题讨论】:

  • 由于 Python 动态意味着您可以在类上设置所需的任何属性,它实际上并没有以相同的方式定义字段,所以我不确定它是否有意义。但是当然你可以使用 getter 和 setter 来进行类型检查等等。更有趣的是,它可以为各种 Python 模式框架(如 Zope 模式、Dexterity 或 SQLAlchemy)创建模式定义。如果存在的话,那就太好了。

标签: python xml data-binding xsd xsd2code


【解决方案1】:

generateDS:我认为这是我需要的好工具

编辑:实际上,generateDS 做得很好!它使用所有方法(setter 和 getter、导出到 XML、从 XML 导入)生成 Python 类。效果很好!

【讨论】:

  • 在测试 generateDS 和 PyXB 之后,我决定使用 PyXB,因为它具有更好的验证支持(模式),并且可以从 python 模块(setup.py)中调用生成器,而无需使用类似系统的东西()。
  • @EnnoGröper 您可能应该提前生成类。我的一个 XSD 生成了一个 29k 行的 Python 文件(使用 PyXB 为 35k)。除非您在安装/运行时才能访问所需的 XSD,否则不要在安装/运行时生成类。
  • 在 generateDS 中导出 XML 真的很慢......还有其他选择吗?这可以快速高效。
  • 这不适用于 python3.6,所以答案已经过时了
  • 在尝试了这里提到的所有解决方案后,我使用了 xsdata 解决方案,这对我来说是最方便的,因为它可以通过 pip 轻松安装并在 GitHub 上进行管理。
【解决方案2】:

对于现在(2021 年)遇到这个问题的任何人,我建议查看xmlschema

我尝试了上述建议(尽管有 EOL 警告),但并不喜欢这种体验。然后我发现了 xmlschema,只用了 3 行数据就解析了数据,包括导入。

>> import xmlschema
>> data_schema = xmlschema.XMLSchema('my_schema.xsd')
>> data=data_schema.to_dict('my_data.xml')

导入的数据是一个嵌套字典,其键和值与架构匹配。 漂亮!

【讨论】:

    【解决方案3】:

    xsdata 从 XSD 文件生成 dataclasses。根据documentation 的说法,它受到了 JAXB 的启发。

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 我花了两天时间尝试使用 PyXB。文档很糟糕,从这个 XSD companieshouse.gov.uk/ef/xbrl/uk/fr/gaap/ae/2009-06-21/… 生成时会产生语法错误,因为标识符不能包含破折号。
      • 一旦我修复了这些错误,我只想在阅读 XML 时开始访问元素......不,所有示例都使用没有命名空间的普通 XML,而且几乎除了一堆难以理解的图表之外,没有对象的 API 文档
      • 总而言之,对于其他阅读本文的人,请远离 PyXB。我真的不明白炒作,与它一起工作令人难以置信的沮丧。
      • pyxb 在the end of life
      • 是的,PyXB 已停产。我正在使用这个叉子:github.com/jonfoster/pyxb 但我真的不能推荐它用于“绿地”开发。如果您已经在使用 PyXB,它可能会帮助您推迟大重写以使用其他东西。
      【解决方案5】:

      http://pypi.python.org/pypi/rsl.xsd/0.2.3

      另外,你可能想要http://pyxsd.org/ 它工作得很好。

      【讨论】:

      • 我看到 pyxsd 从未超过 0.1 版本。有什么明显的限制吗?
      • @Marcin:“任何显着的限制”是无法回答的。 XSD 允许编写一些不容易轻松 转换为 Python 的东西。这是“限制”吗?如果是这样,这不是 Python 本身的限制吗?您唯一能做的就是将 PyXSD 用于您的特定 XSD,看看它是否适合您。如果它不起作用,那么它有一个显着的限制。一组给定的 XSD 可能非常复杂或非常简单。
      猜你喜欢
      • 1970-01-01
      • 2019-02-19
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多