我有一个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中搜索了能够执行此操作的解决方案,但只是遇到了两种可能的解决方案,但没有成功。
使用SDO_DAS_XML。但是,这取决于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(如上所述)的通用命令。
非常感谢任何想法或解决方案:)
谢谢!
答案 0 :(得分:1)
我发现执行此任务的唯一合理方法是将XSD视为任何XML,使用DOMDocument来解析它并从中构建专门的XML实例。
//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';
答案 1 :(得分:1)
答案 2 :(得分:0)
我在PHP中找不到任何内容,但我遇到了这个问题 - http://sourceforge.net/projects/camprocessor/
它在JAVA中,但作为它的开源,你可以尝试从给定的XSD中找到用于生成XML样本的精确java类。之后,同一个类的逻辑可以在PHP中实现。
可能听起来不切实际,但这是关闭的我可以得到! :|