カテゴリー: PHP5 XMLファイルと配列を相互に受け渡しをするクラス

PHP5 XMLファイルと配列を相互に受け渡しをするクラス

<?php
/**
* クラスの説明
*   XMLファイルと配列を相互に受け渡しをするクラス
*
* @author k.t
* @since PHP 5.0
*/
class com_xml_array
{
 /**
  * Arrayに入っている内容を、XMLファイルに書き込む。値はキー値が’text’に格納する。
  * @param string $file  書き込むファイル名
  * @param Array  $array 内容が入ったArray
  * @return string
  */
 public static function save_array2xml($file,$array,$xml_root_name=’xml_root’)
 {
  $dom = new DomDocument(‘1.0′,’UTF-8′);
  $dom->preserveWhiteSpace = false;
  $dom->formatOutput = true;

  $parent = new domElement($xml_root_name);
  $dom->appendChild($parent);
  self::array2xml_recursive($array,$parent,$dom);
  $dom->save($file);
 }
 /**
  * 再帰的にarrayの内容をxmlにする.
  * @param Array   $array
  * @param DOMNode $parentarray
  * @return
  */
 private static function array2xml_recursive($array,&$parent,&$dom)
 {
  foreach($array as $key => $value)
  {
   if(is_array($value))
   {
    $node = $dom->createElement($key);
    $parent->appendChild($node);
    self::array2xml_recursive($value,$node,$dom);
   }
   else if(is_string($value))
   {
    if($key==’text’)
    {
     $node = $dom->createTextNode($value);
     $parent->appendChild($node);
    }
    else
    {
     $node = $dom->createElement($key,$value);
     $parent->appendChild($node);
    }
   }
   else
   {
    $node = $dom->createElement($key,$value);
    $parent->appendChild($node);
   }
  }
 }

 /**
  * XMLファイルを読み込んで、Arrayに格納する。ノード中に子ノードを作る場合で、そのタグの値を設定する場合は、キー値が’text’に値を格納する。
  * @param string $file ファイル名
  * @return Array 読み込んだ結果が入った配列
  */
 public static function load_xml2array($file)
 {
  $dom = new DomDocument(‘1.0′,’UTF-8’);
  $dom->preserveWhiteSpace = false;
  $dom->formatOutput = true;
  try
     {
         $ret=$dom->load($file);
         if(!$ret) return null;
       }
       catch(Exceptuin $ex)
       {
         throw new Exception($ex->getMessage());
       }
  $array = null;
  $root = $dom->childNodes->item(0)->childNodes;
  foreach($root as $node)
  {
   $node_type = $node->nodeType;
   if($node_type==XML_TEXT_NODE)
   {
    $array[‘text’] = $node->nodeValue;
   }
   else
   {
    self::xml2array_recursive($node,$array[$node->nodeName]);
   }
  }
  return $array;
 }

 /**
  * 再帰的にXMLの構造をArrayに格納する.
  * @param DOMNode $pnode
  * @param Array   $array
  */
 private static function xml2array_recursive($pnode,&$array)
 {
  if(!$pnode->hasChildNodes()) return;
  $child_nodes = $pnode->childNodes;
  if($child_nodes->length == 0) return;
  foreach($child_nodes as $node)
  {
   $node_type = $node->nodeType;
   if($node_type==XML_TEXT_NODE)
   {
    $array[‘text’] = $node->nodeValue;
   }
   else
   {
    self::xml2array_recursive($node,$array[$node->nodeName]);
   }
  }
 }
}
?>

全自動マージャン卓
10万円未満で買える
折りたたんで収納


会社に1台

AMAZON