从 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 类?的主要内容,如果未能解决你的问题,请参考以下文章