xsd解析然后在php中制作动态表单

时间:2014-02-26 11:34:38

标签: php xml parsing xsd

我对语言和解析都不熟悉。我有一个xsd文件,我必须解析并使用xsd文件的值生成动态表单。

这是我的xsd文件。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="NewSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="app_bundle_name" type="xs:string" />
  <xs:element name="app_name" type="xs:string" />
  <xs:element name="app_xsd_version" type="xs:string" fixed="1.001"/>
  <xs:element name="configuration_version" type="xs:string"/>       
  <xs:element name="configuration_name" type="xs:string" />
  <xs:complexType name="connections1">
    <xs:sequence>
      <xs:element name="ip_address" type="xs:string" minOccurs="8" />
      <xs:element name="port" type="xs:integer" minOccurs="8"/>
      <xs:element name="ssl" type="xs:boolean" minOccurs="8"/>
      <xs:element name="device_name" type="xs:string" minOccurs="8"/>
      <xs:element name="name" type=`enter code here`"xs:string" />
      <xs:element name="user" type="xs:string" />
      <xs:element name="password" type="xs:string" />
      <xs:element name="barcode_enter" type="xs:boolean" />
      <xs:element name="barcode_next" type="xs:boolean" />
      <xs:element name="close_session_on_exit" type="xs:boolean" />
      <xs:element name="send_field_exit" type="xs:boolean" />
      <xs:element name="field_exit_on_next" type="xs:boolean" />
      <xs:element name="barcode_prefix" type="xs:string" />
      <xs:element name="barcode_suffix" type="xs:string" />
      <xs:element name="treat_enter_as_field_exit" type="xs:boolean" />
       <xs:element name="maintain_zoom_level" type="xs:boolean" />
    </xs:sequence>
  </xs:complexType>
 <xs:complexType name="settings" />
</xs:schema>

这里的名称应该被解析为label.and type应该成为控件的类型,例如string应该成为textbox,boolean应该变成选择框,选项为yes或no.Fixed值将在textboxes中反映为它们的值。

2 个答案:

答案 0 :(得分:0)

您可以使用simplexml_load_file功能从文件中提取数据。然后循环遍历xs:sequence元素子元素,随时创建表单元素。

答案 1 :(得分:0)

Finally got the answer by myself...
So i am posting the code,may be anyone else could get help from the code.....

<html>
<head>
    <link rel="stylesheet" type="text/css" href="style_form.css" />

</head>
<body>
<?php
$doc = new DOMDocument();``
$doc->preserveWhiteSpace = true;
$doc->load('test.xsd');
 $xsdstring = "test.xsd";
 $t = new XMLREADER();
 $t->open($xsdstring);
    while($t->read())
 {
     if ($t->name === "xs:element")
            {
               echo '<div class="contain_div"><div class="lblname" >'. $t->getAttribute('name').'</div>';
                if($t->getAttribute('type')=='xs:string')
                    {
                        if($t->getAttribute('fixed')!='')
                            { 
                                echo '<div class="txtvaluestr"><input type="text" value="'.$t->getAttribute('fixed').'" readonly/></div></div>';    
                            }
                        else
                            { 
                                if($t->getAttribute('maxOccurs')!='')
                                {
                                    $max=$t->getAttribute('maxOccurs');
                                    echo '<div class="txtvaluestr"><input type="text"/></div><input style="margin-left:10px;" type="button" value="+" class="addButton"></div>';    
                                }
                                else
                                {
                                    echo '<div class="txtvaluestr"><input type="text"/></div></div>';    
                                }
                            }
                    }   
                else if($t->getAttribute('type')=='xs:integer')
                      {
                        if($t->getAttribute('fixed')!='')


    enter code here

        {
                            echo '<div class="txtvalueint"><input type="text" value="'.$t->getAttribute('fixed').'" readonly/></div></div>';
                        }
                        else
                        {
                            if($t->getAttribute('maxOccurs')!='')
                            {
                                echo '<div class="txtvalueint"><input type="text"/></div><input style="margin-left:10px;" type="button" value="+" class="addButton"></div>';   
                            }
                            else
                            {
                                echo '<div class="txtvalueint"><input type="text"/></div></div>';   
                            }
                        } 
                    }  
                else if($t->getAttribute('type')=='xs:boolean')
                      {
                        if($t->getAttribute('fixed')!='')
                        {
                            echo '<div class="txtvaluebool"><select id="opt"><option>'.$t->getAttribute('fixed').'</option></select></div></div>';
                        }
                        else
                        {
                            echo '<div class="txtvaluebool"><select id="opt"><option>Yes</option><option>no</option></select></div></div>';  
                        }  
                    }  
            }
 }
?>
</body>
<html>