从 XSD 生成 PHP 类?

Posted

技术标签:

【中文标题】从 XSD 生成 PHP 类?【英文标题】:generate PHP classes from XSD? [closed] 【发布时间】:2011-01-16 20:27:20 【问题描述】:

世界上有 JavaBeans 或 php 的 JAXB 的类似物吗? 是否可以从 XML 模式生成 PHP 类?

将 API 发布为 XSD 架构是一种常见的做法。 Java 和 C# 人员可以通过直接从 XSD 生成类来利用这一点。 PHP有同样的工具吗?

【问题讨论】:

嗯,有总是一种方法......无论它是否实用,都是另一回事。我可以想象编写一个类来读取 XML 文件并将字符串放在一起来声明一个类及其方法,然后对其进行评估。 你的意思是在运行时生成吗?只获得一堆普通类(并具有自动完成功能)会更实用 试试 wsdl2php,正如我在答案中所说的那样。它用于将 wsdl 解析为 php 类,但我认为 wsdl 和 xsd 应该是一回事。 【参考方案1】:

我现在正在处理这个问题,并会在它达到更不稳定的状态后立即发布该工具。在这里查看http://mikebevz.com/xsd-to-php-tool/

更新。我刚刚发布了第一个工作原型,它适用于 UBL 2.0 模式和一个简单的模式,但更严格的测试正在进行中。如果您发送您正在使用的模式,我将不胜感激,因此我会将它们包含在测试套件中。

更新。 2. XSD2PHP 达到 0.0.5 版本。查看https://github.com/moyarada/XSD-to-PHP的进度

【讨论】:

我检查了这个(试图用它编译 SAML2 XSD),自 11 年 2 月以来似乎没有任何进展,有一个分支可以修复最明显的缺陷(没有它它不会' t运行)但它仍然需要一些工作...... 伙计们,加油。它是开源的——你获取源代码并修复它。相反,我被否决了。我不明白。 页面被暂停。可惜链接失效了【参考方案2】:

使用 XSD 类生成器的主要原因是为了

    获取编译时检查 比普通的旧 XML API 更简单的语法 在您的 IDE 中自动完成。

现在将此与 PHP 进行对比。 PHP 确实没有 有编译时检查并且它 支持动态方法/属性。除非您真的需要自动完成,否则这会使上述两个主要原因无效并使其成为非问题。换句话说,有理由在 PHP 中使用 XSD 类生成器,这可能也是为什么不存在的原因。

我的建议是使用 PHPs Simple XML,它创建属性以在运行时动态匹配 XML。如果您根据 XSD 文件验证您的 XML,然后创建一个简单 XML 对象,那么您的 XML 对象结构就具有完整的方法和属性,而无需生成代码。 PHP 中一个非常好的方法。

请注意,我没有说 SimpleXML 与生成的 XSD 类相同,当然不是。。但它非常接近,使用和 API 方面。不管怎样,你最终还是会做类似$company->employee[2]->firstname 的事情。

【讨论】:

绝对错误。 SimpleXML 只是通用的 XML 对象,它与 XSD 中描述的数据类型没有任何共同之处。我需要从 XSD 创建业务逻辑实体并在代码中对其进行操作,而不仅仅是创建和验证 XML。 我从未说过 SimpleXML 与 XSD 类相同。请阅读并思考我所说的关于动态/静态的内容,我认为 PHP 中的 XSD 生成的类毫无意义。这是非问题的解决方法。因此,相反,我为您提供了另一种更符合 PHP 精神的方法。但是,如果您仍然决心找到 I-want-Java-XMLBeans-in-PHP 方法的解决方案,那么祝您好运:-) 当 XSD 发生变化时会发生什么?我不同意您的说法,即该列表构成了进行 Object XML 编组/解组的唯一原因。大多数大量使用 Web 服务或正在交换基于标准的数据的地方都使用 XSD 作为单一事实点。具有来回映射到代码的能力的强大之处在于,您可以使用一个规范的事实来源创建特定于语言的结构。 不要碰 SimpleXML,当涉及到严肃的 XML 工作时,它就是垃圾。我必须使用 \DOM 库编写我自己的 PHP 库,才能进行适当优化的 XML 处理。【参考方案3】:

最近还有一个名为PiBX 的工具是JiBX 灵感工具。

来自网站:

PiBX 是 PHP 的 XML 数据绑定框架。

使用 PiBX,您可以生成基于可用的 PHP 类 XML 模式。这些类可用于将信息编组到 XML 无需担心模式检查、约束或限制。

【讨论】:

这个软件好像被作者官方抛弃了。【参考方案4】:

这似乎做得不错https://github.com/goetas-webservices/xsd2php

我希望它能处理枚举验证,但在我的用例中似乎可以正常工作。我发现它生成的 META .yml 文件很有帮助。

【讨论】:

【参考方案5】:

这个库似乎是当今最好的选择: https://github.com/goetas/xsd2php

它为 XML 元素生成 PHP 类并且可以来回转换:

XML -> PHP -> XML

【讨论】:

【参考方案6】:

XSD 模式通常写在 SOAP Web 服务上的 WSDL 文件中。

wsdl2php 是一种将 WSDL(XSD) 模式解析为 php 类的工具。它使用 php 的原生 SoapClient 作为客户端:

https://github.com/jbarciauskas/wsdl2php

【讨论】:

【参考方案7】:

我不久前研究过,我当然找不到。如果您的架构很简单,那么有一个人 hacked a simple version together 用于平面架构。

这就是我所知道的。通常these guys 擅长支持主要语言以外的语言,但他们也不做 PHP。

【讨论】:

【参考方案8】:

DMS Software Reengineering Toolkit 是可配置的代码生成机制,可用于处理任意正式文档作为输入。 DMS 可用于生成 任意输出语言的代码。

我们使用它从 DTD 生成原生 Java 和 COBOL XML 读取器和写入器,它们是模式的远亲。相同的想法很容易应用于 PHP。

【讨论】:

谢谢,但我想它很贵:-)

以上是关于从 XSD 生成 PHP 类?的主要内容,如果未能解决你的问题,请参考以下文章

从 .XSD 文件生成 Java 类...?

从 C# 类代码生成 xsd 注释和文档标签

从 Visual Studio 中的类生成 XSD

如何从 xsd 生成 .NET 4.0 类?

使用默认包名称和XSD名称空间从XSD生成Java类

是否可以使用 Qt(不使用 XSD 工具)从 xsd 生成 C++ 类?