2011-02-14 85 views
0
$doc = new DOMDocument(); 
$doc->load('model.xml'); 
$fields = $doc->getElementsByTagName("field"); 

$i = 0 ; 
foreach($fields as $field) 
{ 
    $name = $field->getAttribute('name') ; 
    $type = $field->getAttribute('type') ; 
    /* constraints */ 
    $con = $field->getElementsByTagName('constraints') ; 
    foreach($con as $c) 
    { 
     $min_length = $c->getElementsByTagName('min_length')->item(0)->nodeValue ; 
     $max_length = $c->getElementsByTagName('max_length')->item(0)->nodeValue ; 
     if ($c->getElementsByTagName('required')->item(0)) 
     { 
      $required = 1 ; 
     } 
    } 
    //check input types 
    if($type == 'text' || $type == 'password') 
    { 
     echo $field->getElementsByTagName('label')->item(0)->nodeValue.'  : ' ; 
     //create input tag 
     echo '<input type="'.$type.'" name="'.$name.'" min_length="'.$min_length.'" max_length="'.$min_length.'"' ; 
     //add required field to input 
     ($required == 1) ? print('class="required" /><span style="color:red">*</span><br />') : ('/><br />'); 

    }elseif($type == 'radio'){ 

     echo $field->getElementsByTagName('label')->item(0)->nodeValue.'&nbsp; : <br /> ' ; 
     $items = $field->getElementsByTagName('item') ; 
      foreach($items as $item) 
      { 
       $labels[] = $item->getElementsByTagName('label')->item(0)->nodeValue ; 
       $values[] = $item->getElementsByTagName('value')->item(0)->nodeValue ; 
      } 


      for($i=0 ; $i<=(count($labels)-1);$i++) 
      { 
       //create inputs 
       echo $labels[$i].'&nbsp; : <input type="radio" name="'.$name.'" value="'.$values[$i].'" ' ; 
       ($required == 1) ? print('checked="checked" /><span style="color:red">*</span><br />') : ('/><br />'); 
      } 
    }elseif($type == 'select'){ 

     echo $field->getElementsByTagName('label')->item(0)->nodeValue.'&nbsp; : <br /> ' ; 
     $items = $field->getElementsByTagName('item') ; 
      foreach($items as $item) 
      { 
       $labels[] = $item->getElementsByTagName('label')->item(0)->nodeValue ; 
       $values[] = $item->getElementsByTagName('value')->item(0)->nodeValue ; 
      } 

      echo '<select name="'.$name.'">' ; 
      for($i=0 ; $i<=(count($labels)-1);$i++) 
      { 
       //create inputs 
       echo '<option value="'.$values[$i].'" >'.$labels[$i].'</option>' ; 
      } 
      echo '</select>'; 
    } 

这里是我的xml:问题与XML DOM文档

<?xml version="1.0" encoding="utf-8" ?> 
<fields> 
    <field name="first_name" type="text"> 
     <label>First Name</label> 
     <constraints> 
      <required/> 
      <min_length>1</min_length> 
      <max_length>255</max_length> 
     </constraints> 
    </field> 
    <field name="password" type="password"> 
     <label>Password</label> 
     <constraints> 
      <required/> 
      <min_length>6</min_length> 
      <max_length>8</max_length> 
     </constraints> 
    </field> 
    <field name="age" type="text"> 
     <label>Age</label> 
     <constraints> 
      <min>1</min> 
      <max>99</max> 
     </constraints> 
    </field> 
    <field name="gender" type="radio"> 
     <label>Gender</label> 
     <item> 
      <label>Male</label> 
      <value>1</value> 
     </item> 
     <item> 
      <label>Female</label> 
      <value>2</value> 
     </item> 
     <constraints> 
      <required/> 
     </constraints> 
    </field> 
    <field name="language" type="select"> 
     <label>Language(s)</label> 
     <item> 
      <label>English</label> 
      <value>1</value> 
     </item> 
     <item> 
      <label>French</label> 
      <value>2</value> 
     </item> 
     <item> 
      <label>Persian</label> 
      <value>4</value> 
     </item> 
     <constraints/> 
    </field> 
</fields> 

,如果你运行这段代码,你可以看到无线电项选择HTML视图如何避免这种情况发生重复。

+0

你能否将问题多分离一下并描述会发生什么?我怀疑很多用户是否有兴趣先在本地环境中运行这个问题 – 2011-02-14 20:14:42

回答

1

你是不是你重置$标签& $值,所以一旦循环完成,但至今还记得从之前的值,添加类似的的foreach顶部以下($领域...循环。

$labels = null; 
$values = null; 
+0

哦,我总是犯了简单的错误。 – mehdi 2011-02-14 20:25:01