【问题标题】:Transforming an XSD template to an XML instance in PHP在 PHP 中将 XSD 模板转换为 XML 实例
【发布时间】:2011-06-20 04:25:27
【问题描述】:

我有一个 XSD 文件,我需要从该 XSD 文件生成一个有效的示例 XML。 例如,给定以下 XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Address">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Recipient" type="xs:string" default="John Doe" />
        <xs:element name="Street" type="xs:string" />
        <xs:element name="age" type="xs:integer"/>
        <xs:element name="dateborn" type="xs:date"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

生成以下 XML:

<xml>
    <Address>
        <Recipient>John Doe</Recipient>
        <Street></Street>
        <age>43</age>
        <dateborn>1970-03-27</dateborn>
    </Address>
</xml>

我在 PHP 中搜索了一个能够执行此操作的解决方案,但只遇到了两种可能的解决方案,但没有成功。

  1. 使用 SDO_DAS_XML 。但是,这取决于 php_sdo.dll 的可用性,似乎没有真正适用于 Windows 的版本。

  2. 第二次尝试是查看 github.com/moyarada/XSD-to-PHP 或 forums.devshed.com/php-development-5/xml-schema-binding-to-php-code-jaxb-equivalent-199799.html 但是,它们的目标是解析 XSD 并转换为 PHP 类,并且似乎不能将任何 XSD 转换为简单的干净 XML(如上)。

非常感谢任何想法或解决方案:)

谢谢!

【问题讨论】:

  • 我要澄清一下,我需要根据 XSD 规则(包括默认/固定值、属性等)将这个 XSD 生成为空 XML 的最简单形式

标签: php xml xsd


【解决方案1】:

我发现执行此任务的唯一合理方法是将您的 XSD 视为任何 XML,使用 DOMDocument 对其进行解析并从中构建您的专用 XML 实例。

  • 此方法假定您的 XSD 将始终具有相同的结构,只是字段名称不同,并且您对一种非常简单的 XML 实例形式感兴趣,即节点,仅此而已。
  • 该方法的好处在于灵活性,只需编辑 foreach 循环即可修改您的特殊结构。
//Build the template from the schema:
$schema = new DOMDocument();
$schema->loadXML($schemaXSDFile); //that is a String holding your XSD file contents
$fieldsList = $schema->getElementsByTagName('element'); //get all elements 
$metadataTemplate = '';
foreach ($fieldsList as $element) {
    //add any special if statements here and modify the below to include any attributes needed
    $key = $element->getAttribute('name');
    $metadataTemplate .= '<' . $key . '>' . '</' . $key . '>';
}

//Manipulate the template adding your fields values:
$metadataXml = simplexml_load_string($metadataTemplate);
$metadataXml->fieldName = 'value';

【讨论】:

    【解决方案2】:

    我偶然发现了您寻找解决方案的任务,因为我自己也需要一个。

    对于寻求解决方案的每个人:

    找到XSD2PHP Original 并将其分叉以更好地满足我的需求Updated Version。

    【讨论】:

      【解决方案3】:

      我没有在 PHP 中找到任何东西,但我遇到了这个 - http://sourceforge.net/projects/camprocessor/

      它在 JAVA 中,但作为开源,您可以尝试从给定的 XSD 中找到用于 XML 样本生成的确切 java 类。之后,可以在 PHP 中实现同一类的逻辑。

      可能听起来不切实际,但这是我可以得到的关闭! :|

      【讨论】:

        猜你喜欢
        • 2011-08-21
        • 2014-02-22
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        相关资源
        最近更新 更多