我有一个xsd文件,需要从该xsd文件生成一个有效的示例xml。
例如,给定以下xsd:<?xml version="1.0" encoding="utf-8"?>
生成以下XML:
John Doe
43
1970-03-27
我在php中搜索了一个能够执行此操作的解决方案,但只找到了两个可能的解决方案,但没有成功。
使用sdo_das_xml。但是,这取决于php_sdo.dll的可用性,对于php_sdo.dll,似乎没有一个版本可以在windows上实际工作。
第二个尝试是查看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的通用enoguh(如上所述)。
任何想法或解决方案都非常感谢:)
谢谢!
最佳答案
我发现执行此任务的唯一合理方法是将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 . '>';
}
//Manipulate the template adding your fields values:
$metadataXml = simplexml_load_string($metadataTemplate);
$metadataXml->fieldName = 'value';