| 
 | 
 
 
            本文实例讲述了PHP实现XML与数据格式进行转换类。分享给大家供大家参考。具体如下: 
 $val) { 
        if ($priority == 'tag') $attributes_data[$attr] = $val; 
        else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'  
      }  
    }  
    // See tag status and do the needed. 
    if ($type == "open") { // The starting of the tag '' 
      $parent[$level-1] = &$current; 
      if (!is_array($current) or (!in_array($tag, array_keys($current)))) { // Insert New tag 
        $current[$tag] = $result; 
        if ($attributes_data) $current[$tag . '_attr'] = $attributes_data; 
        $repeated_tag_index[$tag . '_' . $level] = 1; 
        $current = &$current[$tag]; 
      } else { // There was another element with the same tag name 
        if (isset($current[$tag][0])) { // If there is a 0th element it is already an array 
          $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result; 
          $repeated_tag_index[$tag . '_' . $level]++; 
        } else { // This section will make the value an array if multiple tags with the same name appear together 
          $current[$tag] = array($current[$tag], $result); //This will combine the existing item and the new item together to make an array  
          $repeated_tag_index[$tag . '_' . $level] = 2; 
          if (isset($current[$tag . '_attr'])) { // The attribute of the last(0th) tag must be moved as well 
            $current[$tag]['0_attr'] = $current[$tag . '_attr']; 
            unset($current[$tag . '_attr']); 
          }  
        }  
        $last_item_index = $repeated_tag_index[$tag . '_' . $level]-1; 
        $current = &$current[$tag][$last_item_index]; 
      }  
    } elseif ($type == "complete") { // Tags that ends in 1 line '' 
      // See if the key is already taken. 
      if (!isset($current[$tag])) { // New Key 
        $current[$tag] = $result; 
        $repeated_tag_index[$tag . '_' . $level] = 1; 
        if ($priority == 'tag' and $attributes_data) $current[$tag . '_attr'] = $attributes_data; 
      } else { // If taken, put all things inside a list(array) 
        if (isset($current[$tag][0]) and is_array($current[$tag])) { // If it is already an array... 
          // ...push the new element into that array. 
          $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result; 
          if ($priority == 'tag' and $get_attributes and $attributes_data) { 
            $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data; 
          }  
          $repeated_tag_index[$tag . '_' . $level]++; 
        } else { // If it is not an array... 
          $current[$tag] = array($current[$tag], $result); //...Make it an array using using the existing value and the new value  
          $repeated_tag_index[$tag . '_' . $level] = 1; 
          if ($priority == 'tag' and $get_attributes) { 
            if (isset($current[$tag . '_attr'])) { // The attribute of the last(0th) tag must be moved as well 
              $current[$tag]['0_attr'] = $current[$tag . '_attr']; 
              unset($current[$tag . '_attr']); 
            }  
            if ($attributes_data) { 
              $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data; 
            }  
          }  
          $repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken  
        }  
      }  
    } elseif ($type == 'close') { // End of tag '' 
      $current = &$parent[$level-1]; 
    }  
  }  
  return($xml_array); 
}  
// Array to XML 
class array2xml { 
  public $output = "\n"; 
  public $sub_item = array(); 
  public function __construct($array) { 
    $sub_item = array(); 
    $this->output .= $this->xmlmake($array); 
  }  
  public function xmlmake($array, $fk = '') { 
    $xml = ''; 
    global $sub_item; 
    foreach ($array as $key => $value) { 
      if (is_array($value)) { 
        if (is_numeric($key)) { 
          $this->sub_item=array_merge($this->sub_item,array($fk)); 
          $xml .= "" . $this->xmlmake($value, $key) . ""; 
        } else { 
          $xml .= "" . $this->xmlmake($value, $key) . ""; 
        }  
      } else { 
        $xml .= "{$value}\n"; 
      }  
    }  
    return $xml; 
  }  
  public function output(){ 
    foreach($this->sub_item as $t){ 
      $this->output = str_replace("","",$this->output); 
      $this->output = str_replace("","",$this->output); 
    } 
    return $this->output; 
  } 
} 
希望本文所述对大家的php程序设计有所帮助。 
             
             
您可能感兴趣的文章:PHP XML操作类DOMDocumentPHP操作XML作为数据库的类php中使用DOM类读取XML文件的实现代码自定义php类(查找/修改)xml文档php中Array2xml类实现数组转化成XML实例php实现的xml操作类PHP数组生成XML格式数据的封装类实例PHP实现的XML操作类【XML Library】php实现的XML操作(读取)封装类完整实例PHP封装的XML简单操作类完整实例 
         |   
 
 
 
 |